The apps could actually be given a chance to shut down if they were able to devote a thread but it might have too high a resource cost. Have a thread block in (an ioctl? some other system call?) forever or until an unmount request comes in and then die when the ioctl returns.

Doesn't help old applications, applications with no source, or whatever, but it does mean that the app could clean up instead of unilateral death from on high. Probably not worth it, though.