I am indeed thinking about these things and how to make it easier to configure which features get "installed" in a site.
Development of external modules is not difficult and there is a good example if you open the WebStore.sln, the e-commerce feature is a complex feature and is implemented as separate external projects. It uses post build events to deploy dlls, resource files, .ascx, and .aspx files to the correct location beneath the web. The only downside in development is that you have to rebuild even if you only made a change in a .ascx or .aspx files. The reason you have to rebuild is so the files get copied by the post build event.
When we talk about installing a feature there are 2 levels at which we discuss it, installing on the server and installing in the site.
Installing on the server requires xcopy deployment which is not difficult though yes it requires instructions and copying to a few locations. I do not think it is a good idea to try and implement a web based installer for deploying features on the server because then the web app would have to run with permission to write files in locations like the bin folder which is a very bad idea.
Once a feature is installed on the server installing or uninstalling from the site is a simple matter and a web ui can be used. Every feature needs a .ascx file (inheriting from SiteModuleControl), a simple feature can be only that but more complex features require separate pages. the .ascx file is simply the entry point to the feature and it can plug into the content system framework. From there it should know how to link to its own supporting pages which are outside the content system pages.