One of the things that ought to be simpler and more "front-and-center" is the detection of .NET runtime version, getting runtime environment information and updating the runtime.
Yes, yes, yes- these things can be done right now, so it has not been overlooked (here's a KB for one method http://support.microsoft.com/default.aspx?scid=kb;en-us;315291, and here's a blog entry from Rob Villahermosa with another method http://blogs.msdn.com/robvi/archive/2004/02/17/75272.aspx). You could also use WMI to do it, and if I have time I could post some code. Of course, an installer is a great place to check for this. These should be part of the launch conditions. There's also this little trick that shows how to detect .NET on the client in an ASP.NET app (http://www.httprevealer.com/usage_dotnet.htm).
But, I am persuaded that it ought to be even simpler, especially when dealing with the many, many programs we write that have no installer (remember that XCOPY deployment model?) There should be classes hanging right off of System that give up more environment information (about the runtime specifically) and that could let you conditionally update the runtime. It strikes me that this would make it better for the times when an installer is overkill, but just rolling out the assemblies with no conditions is not enough. I just find looking in the registry or file system for runtime info to be a little clumsy compared to what could be done.
Rock thought for the day: Riding my bicycle to Linkin Park is a good thing. I think my average speed increases in these conditions.