I have actually implemented a program that has both WinForms and WPF user interfaces. I implemented the WinForms first, and then added WPF when people complained that WinForms looked "too 90s". Currently the old UI is still available with a "-winforms" command-line option. I used MVVM with a strict rule against using WPF classes in the viewmodel; thus, the majority of the code is shared between the two versions. WinForms itself doesn't support the MVVM pattern very well, but I used the Update Controls framework which provides its own unique approach to MVVM, as a library that sits on top of WinForms (and integrates seamlessly with WPF).
However, what you want to do is fairly challenging. WPF comes with .NET 3.5 (3.0?), so you'd probably need separate executables, one for .NET 3.5 and one for 2.0. (I'm not 100% sure about this, since .NET 3.5 actually still uses the same 2.0 CLR binaries; so it might be possible to do it all in one executable, somehow.)
But why go to so much trouble? Almost all computers now have .NET 3.5, and those that don't can be upgraded.