If you try to run an older .NET exe, Win8 and Sever2012 give a popup that it needs to install support for .NET 2.0 -> .NET 3.5 (these all .NET generate code to run on CLR v2, thus the range).
As an experiment I believe I made a .NET 1.1 "Hello World". I don't have VS2003, to target an app to .NET 1.x. Instead, to do this I used IL to do a round-trip :
ildasm / text hello.exe > hello.il
ilasm hello.il /exe /out hello_1_1.exe /MDV=1.0.3705
The original .NET 4 HelloWorld.exe just runs. I do the change above, it causes the popup to appear. I let MS install the .NET 2-3 support, and the .NET 1.1 test just runs. It seems happy to run on with the v2 CLR. (Maybe I delude myself, since I ran ilasm on a .NET 4 PC).
The .NET loader opens the exe to get the .NET version from the Metadata version string (MDV). It tries to find:
HKLM\Software\Microsoft.NetFramework\Policy\Standards\v1.0.3705. When this is not found, it examines a sister key \Upgrades, where it finds it can map v1.0.0-2.0.50727 to .NET 2.0.50727.
This might fail with apps more complicated than "Hello World". Also this would not trick the installer, so it applies only to install-by-xcopy apps. Also MS will continue to not support 1.x (and pretty soon 2.x).