Randy,
The hardest part right now is #1. Currently there is no way to delete a package that has already been mounted. You can unmount it, but the code necessary to remove the objects that package has created does not exist.
We do need a way to delete individual package instances and the content they contain. I see this happening rarely on a production site, but for someone who wants to test or try out a package it would be very useful.
I see two options, either a service contract or a magically named tcl proc for each package. A package developer would be required to provide a tcl proc that would accept a package_id and correctly remove the objects that belong to it. Some people have mentioned that comprehensive use of on delete cascade in the OpenACS data model would also accomplish this.