Because it is impossible.
The registry has multiple root nodes, but only two interesting ones: LocalMachine and CurrentUser. Normally, the setup writes values into LocalMachine, and the running program ONLY writes into CurrentUser (actually, unless the setup messes with the permissions, the running program can't write into LocalMachine.)
While keeping leftovers in LocalMachine is laziness, as pointed out by the other answers, it is not possible to clean the User part.
If a program is installed per machine (which most are) and multiple users use it, what should the uninstaller do? It could safely remove the user settings of the current account, but the current account might not be your account. (This happens if you started the uninstaller from a non admin account and then entered the credentials of an admin account - the setup is now running under that account, not the first one).
What about the other users? It could try to enumerate all users, but their registry keys might not be loaded. (Windows is lazy and only loads the things it needs.)
But you shouldn't even try that one. If you use roaming profiles, for example for terminal services, and then delete all settings on uninstall, you could really mess up and delete stuff that is actually still in use.
A terminal server is basically one windows machine where multiple users log-in at the same time and use applications.
Say you have two terminal servers running one application. You uninstall the application on TS1, now all the settings for all users are gone on TS2 because you have roaming profiles. oops.
The same also applies to files in the per-user directories.
In the setup of my companies program, I delete the per-machine stuff but don't touch the per-user stuff, not even of the user currently running the setup.