> make install (or ./wierd-application or 'npm install' or whatever)
and all changes made to the filesystem in that shell is written to the upperdir instead. So for example in the above example, the upperdir would contain files such as upperdir/usr/bin/app and upperdir/usr/include/header.h.
It's useful when
* You want to create a deb/rpm/tgz package, but a makefile does not have support for DESTDIR
* An application writes configuration files somewhere, but you don't know where
* An application would pollute your filesystem by writing files in random places, and you want to keep this application local to "this directory"
* In general when you want to know "which files does this application write to" without resorting to strace
* or when you want to isolate writes, but not reads, that an application does