Nope, they run side-by-side fine (I have SQL 2005, 2005 and express on my machine). This is handled by each having a separate instance. The first server you isntall is generally the default instance (although you can give it an explicit name), and subsequent ones have to have explicit names. The full name of a server is machine\instance, so mine are TIGGER, TIGGER\SQL2005, TIGGER\SQLEXPRESS (all of my machines are named after Winne the Pooh characters). When .NET 2.0 is installed, the SQL Express instance is explicitly name SQLEXPRESS.
This explains why, when you look at connection strings, you see things like .\SQLEXPRESS or localhost\SQLEXPRESS. Both . and localhost refer to the current server, allowing you to have a named SQL instance without worrying about the actual name of the machine.