Web servers and DNS servers by default listen on different ports so there is no conflict in running them on the same machine. In practice, they are often separated for several reasons. Performance as luciddream points out can be a reason to separate them. Another reason is failover. If you had all of your services running on a single machine such as dns, web server, e-mail, news groups, etc..., you run the risk of a single failure taking down everything. The mail server could run the machine out of disk space or the power supply fails, etc.. and you end up with a complete failure of everything. By putting services on their own machine, you gain some reliability. One other reason I can offer which applies more on the MS side is software conflicts. If you load up the web service, dns service, MS smtp service, etc.. you're just asking for problems even if the machine has the horsepower to run them all.
GJ