How about load balancing the farm to create "sticky sessions" to stick existing sessions to machines running .net 2.0 and any new sessions to machines running .net 4.0.
Of course this depends on whether your project will withstand running 2 different versions of the project in production at the same time.... As I'm guessing that not only have the .net versions changed but also underlying code in your project. For example will people modifying data in the database from 2 different versions of your project have an impact.
Thus considering it a problem of running multiple versions of your own project, rather than of .net versions' sessions. Looking at it in this angle may make it an easier problem to solve ... or much more difficult :-) depending on your project.