Parce que it is impossible.
Le registre has multiple root nodes, but seulement two interesting ones: LocalMachine and CurrentUser. Normally, the setup writes valeurs into LocalMachine, and the running programme ONLY writes into CurrentUser (en fait, unless the setup messes avec the autorisations, the running programme can't write into LocalMachine.)
While keeping leftovers in LocalMachine is laziness, as pointed out by the other answers, it n'est pas possible to clean the Utilisateur part.
If a programme is installé per machine (which most are) and multiple utilisateurs use it, what should the uninstaller do? It could safely supprimez le utilisateur paramètres du current compte, but the current compte might not be your compte. (Cela se produit si vous started the uninstaller from a non admin compte and ensuite entered the credentials of an admin compte - the setup is maintenant running under that compte, not the first one).
What about the other utilisateurs? It could try to enumerate all utilisateurs, but their registry clés might not be loaded. (Windows is lazy and seulement loads the things it needs.)
But you ne devrait pas even try that one. Si vous use roaming profiles, par exemple for terminal services, and ensuite supprimer all paramètres on désinstaller, you could really mess up and supprimer stuff that is en fait encore in use.
A terminal server is basically one windows machine where multiple utilisateurs log-in en même temps and use applications.
Say you have two terminal servers running one application. You uninstallez le application on TS1, maintenant all the paramètres for all utilisateurs are gone on TS2 parce que you have roaming profiles. oops.
The same également applies to fichiers dans le per-utilisateur répertoires.
In the setup of my companies programme, I supprimez le per-machine stuff but ne touch the per-utilisateur stuff, not even du utilisateur actuellement running the setup.