Thought this post might not hurt as Ashampoo UnInstaller 5 is the GOTD.
The only true, near 100% uninstallers are separate apps written to get rid of usually only one specific program or driver set, e.g. McAfee's & Bitdefender's separate removal apps, or DDU [guru3d.com] designed to get rid of most of a graphics driver [say *most* because .NET components may be left behind].
To completely remove a program you 1st have to know what changes it makes to Windows during its installation. There are 2 ways to know what files it adds: 1) you can sometimes use Universal Extractor or 7-Zip to extract the files in the setup program, &/or 2) you can take before & after snapshots of every file, noting the changes. The 2nd method works best when there's no other software installed in Windows -- before & after snapshots will not show a setup routine adding a file that's already been added to Windows by a previous software install. To see registry changes you have to go the before & after snapshot route, & again it works best when no other software's been installed, because as with added files, you won't record an installation routine trying to add a registry key or entry that's already present.
For a bare Windows install to use for monitoring, you can use a regular Windows installation, Windows installed to a VHD, or Windows installed to a VM. It works best if you can restore that Windows installation, so you can revert to having no software installed after monitoring 1 or more software installs. If/when drivers might come into play VMs are the weakest alternative -- their biggest strength when you're monitoring installations might be the ability to run Windows XP...
[A side note: Windows software is supposed to be written differently for Windows Vista <-> 10, & when Vista came out some developers tried to do it the Microsoft way. That didn't work out so well. Since then the majority of software installs identically in XP as in later versions of Windows, with the only real difference being the naming of the User related folders. XP is superior when it comes to monitoring software because it's simpler -- there's less garbage to weed through & ignore.]
Now, the hard parts... AFAIK there are no tutorials or guides or definitive lists on what registry entries are garbage & which ones are meaningful when you've monitored a software install. If a bunch, or sometimes most all apps add the same sort of keys, after monitoring however many it becomes clear that those have to do with Windows itself rather than a specific app, & so for the purpose of monitoring an installation are garbage.
The 2nd hard part, the one that effects every universal uninstaller app out there, has to do with duplicate files & registry entries. If/when apps X & Y both add the same registry entry or file, if you remove that as part of uninstalling X, you broke Y. Related issues can also crop up with .NET, though because .NET can be so complex, the best you can generally do is ignore it until there's an insurmountable problem, then remove it entirely [as possible] & reinstall -- a BIG PITA. Ignore anything in Windows\ WinSxS\.
If you are removing an app manually you might remember or have records showing that more than one app uses the same files or registry entries, or from experience you might know that certain files or registry entries are often shared, & in any case you can export or save registry keys, & save copies of files before you remove them. An uninstaller app that recorded a software installation errors on the side of caution, leaving anything in place that might have a chance, however remote, of being shared -- they most often won't even show you that those changes happened. As a result you might have 3/4 of an app's total registry entries left behind. An uninstaller app that did not record an install basically searches based on that app's name.
If you want to manually remove an app & don't have installation records, after backing up you can start in the registry [using regedit or similar], look for the app's main key in both Local Machine & Current User Software keys, under the name of the app or developer. Note any file names and long class numbers [e.g. 00000000-0F56-11D2-9887-00A0C969725B] so you can search the registry for those. You can also search using the path to the program's folder, & search on any file names in that folder. When your search turns up a registry key or value, look at everything else in that key to determine if it only deals with the app you're removing, &/or to what extent. You might find an entry with the name of that app's .exe file, find no other files or class numbers listed, & safely delete the entire key. OTOH you might find several file names &/or CLSIDs -- unless you can trace those *only* to the app you're removing, you can only safely remove the part with that .exe file's name.
Removing files without installation records is straightforward -- look for the app's &/or company's name in the Program Files [& Program Files (x86)], Common Files, under All Users & the User Name.
The best approach is to be proactive -- be judicious in what you install in Windows. In a nutshell you're gambling, playing the odds. Is an app well written, does it interact with with Windows &/or other installed software &/or hardware, will any of that change after future software &/or Windows updates? And if any bad things do come to pass, how hard is it to get rid of? In your favor, Windows can be pretty fault tolerant. OTOH it can be irreparably damaged.