This is sort of true, but Google regularly makes statically-linked SDK compatibility layers for Froyo and Gingerbread that add support for the latest API updates -- only the ones that are essential to making a modern app. The latest SDK compatibility API layer adds support for the most important ICS APIs to Froyo/GB and is used by Google's own apps amongst others. Apps that include it can call certain ICS API features and get either a port of the feature or a graceful fallback when ran on Froyo/GB.That's how software development works in every single mobile platform. An app that targets ICS will not run on Gingerbread. An app that targets iOS 4 will not run on iOS 3. An app that targets WP7.5 will not run on WP7.
If a developer wants to take advantages of something that is WP8-only, obviously it will only run on devices with WP8. However, if they don't need that functionality, they can just target Mango and it will work on both. I imagine it will be simple enough to have a version for both, as well.
OEMs can also backport the latest ICS code from individual ICS apps to earlier versions and so can enthusiasts. In particular, the Browser from ICS was widely ported to GB to enhance browser speed. The Galaxy S i9000 has a custom browser based somewhat on the later-generation browsers and thus faster and better than stock GB browser, despite running "gingerbread". Compare the i9000 (with 2.3.6) browser to the Nexus S with 2.3.7's browser and it's night and day.
As a testament to Google's commitment to maintaining API compatibility, most Google apps (all except Chrome Beta) still run on Froyo, GB, HC, and ICS using the SDK compatibility layer. Most of the apps that haven't been officially ported (e.g. the Keyboard) have been unofficially ported from the AOSP and do not make any calls to ICS APIs that would prevent them from working on Froyo/GB.