It is an inevitable fact of physics that some addresses will be unreachable from some parts of the network.
More like an inevitable fact of economics... Thanks to Paul Baran we know how to build reliable networks.
Applications must deal with this (either well or badly), because there is no other choice.
We really don't want this dealing to happen in the applications, for three reasons:
1. Doing all the work again for each application is not a good use of resources
2. It is much harder (or rather: impossible) to get something as tricky as this right in so many places
3. The failure can happen over the course of a session, in which case applications can't do anything to fix it short of implementing a large amount of transport logic