Sure. Kylix and Quake 2 are the first that come to mind (in terms of commercial software). But if you want to see something more GPL/Open Source originating, take, say, XFree86 from Slackware 4.0 and try to run it on Slackware 14. Same thing.
Now you're talking about something different. The OP specifically said upgrading a kernel (not a distribution). You can take the kernel from RHEL 6 and run it on RHEL 5 (in fact, this is exactly what Oracle does with OEL).
Userspace backwards compatibility is a whole different can of worms. For userspace, you're at the mercy of any libraries you dynamically link against, few promise binary compatibility indefinitely. Your Linux native hello world program compiled in 1991 will still run, unmodified, on today's distros, as it doesn't require any libraries. For more complex programs, you're looking at shipping local copies of the libraries you depend on, either via static linking, or copies of the dynamically linked libraries. The latter option can even be done after the fact.
Of course, if you still have the source, things are much easier. A simple recompile is often sufficient to fix any dynamic linking issues, source compatibility is broken far less often than binary compatibility. While not every old Linux program may run out of the box, it should be fairly trivial to make them work on a modern distro.
Now, if you want to talk about running old programs on new versions of Windows, let's talk about IE6 on Windows 8, without using virtualization. Good luck with that!