Apps create many files when launched and configured, such as ~/.mozilla, ~/.opera, files in /var/tmp, /tmp, /var/run, and so on. The files in /var could conceivably be placed as empty files in a user.tar.gz so they would be removed upon a forced uninstall, but no extension maker including myself is going to try to account for every possible file that could be created by an app during runtime. Ccache lets you choose which location to store your cache, and there is no way for an uninstaller to know where you have placed your cache so as to remove it. And stuff in /tmp and /var is temporary and not there on reboot. Config files are left in place by distros like Debian. Most other distros base their uninstallation on which files were actually installed, and not ones that were created by the running of the app. The issue of files created during runtime are going to be there whether a modular shared approach in the extension is used or the extension is installed in a self contained directory.
Tcz's by default don't overwrite existing files or symlinks, so the issue of files getting overwritten is not there unless those files are in the user.tar.gz. Tcz makes it hard to trash your system by installation or uninstallation except in the case of a poorly made user.tar.gz. But removing packages by it's very nature brings in HD-install elements to the system, like leftover files. That just goes with the terriroty. But the uninstall option is there for those who want to use it. I like to test and then uninstall new extensions and be able to update other ones without rebooting, but it is nice to know a guaranteed clean system is only a reboot away.
Features and safety checks have been introduced to tcz-uninstall without really adding too much to the complexity. But aside from other WM support which will be invisible to the user, I think that the feature set is complete.