There's a pretty big flaw in the download implementation. It's existed ever since the feature was first implemented, $DEITY knows how long ago:
The server chops the WAD up into discrete packets of the same or similar size in a linear fashion. It sends how many packets are to be expected to the client, which prepares itself to recieve n packets. The server sends n packets, but corruption or a bad internet connection leaves m packets mangled. The client now has n-m packets, and is waiting for m more packets. But the server isn't going to send any more, because it never finds out that there's a problem with the download. The poor client is effectively left hanging (both metaphorically and literally) until the connection attempt is aborted.
So that's why WAD downloading is crap. It definitely needs a reimplementation, but as always we're a hobbyist project with limited resources and anyone who both cares to reimplement netgame code and has the skill and patience to do so would have more pressing issues on their plate first.