There are three reasons, all linked.
Real web servers serve static content better. Fact. They're optimised for standard download-style traffic and separating that jazz from core game server code makes a lot of sense to a lot of developers. Plus they tend to use comparatively fewer resources and have higher levels of flexibility than a custom-made HTTP server.
Moving HTTP downloads off the game server keeps those important CPU cycles doing what you want them to: letting people frag the hell out of each other... If you can shuffle off the non-critical traffic to another, cheaper and/or clustered server, you keep your game playing smoothly.
As I hinted above, you can cluster or CDN the HTTP traffic, something you can't do (for fairly obvious reasons) with the game servers. This would only really apply on really busy networks but it's a good way to manage your traffic if you're dealing with a lot of potential downloads and they're all mission-critical.
Some game servers do handle it themselves, but, as you've noticed, most do it at a nauseatingly slow rate, again for the second reason above: resources. Bandwidth is almost as important as CPU, so uploads are heavily limited rate to keep players in the game going at top speed.