The worst part of the problem with Dll Hell is that there is no simple way to understand why your program is not working. You may install a game you found on the net and after a while realize that something else is not working. As the problem is related to shared components, what breaks is always "something else" so it's not trivial to detect what broke what. Even if it were possible, the uninstaller would in all likelihood use a conservative approach and not try to remove shared components (probably dumped in some system directory), so the problem will stay even after the culprit's gone.

Windows system have no user comprehensible way to detect what went wrong and where if so-called DLL early binding is in use (no "method xxx() not found in version yyy of zzz.dll, please upgrade to yyy+1" error popping up), and the tradition with Windows error handling is to hide error reasons away from the user. If you happen to develop a project with a large number of DLL involved, the problem rises very quickly and it's very hard to trace and solve: a wrong DLL copied on a production machine can break a system and take hours to understand what went wrong.

If this is not enough for you, you should remember that a COM DLL has to be "registered", i.e. the system registry must be notified a DLL is present. Deciding whether a DLL is already present on a given machine is again a non trivial task unless you want to spend hours playing with RegEdit and RegSvr32, and previous instances of a given DLL must be "unregistered" even if they have already been removed. And even if you do all this right and unregister everything before registering it again, the process may break for no apparent reason and you have to clean the registry manually or reinstall the whole machine.

Dulcis in fundo, not only DLLs are causes of DLL Hell: even OCXs (visual controls put on pages, like text fields or combo boxes) and registrable applications (thing that look like a standard .exe but require a registry update to run) behave in the same exact way. That's why if you keep on loading different software from different vendors on yor Win32 machine, sooner or later you'll have to reinstall.

Please note that not every program developed for the Win32 platform has to use registered DLLs to run: for instance to run a program as complex as Mozilla Firebird you simply copy a folder on your machine and double click on the main program icon, and the same goes for Opera. It is more a matter of software design than need.