How to preserve customizations to the DB is not really easily solvable, as you might propably want to preserve some things and others not, e.g. you want to always mount forums on a certain node but don't want to also copy the test forums that you created on the development server. Otherwise you could just do a dump of the database at a certain point and restore it on the new install.
Package installation, site node creation, mounting etc. could be automated by writing a script that calls various procs like for example site_node_apm_integration::new_site_node_and_package to mount a package etc. In that script you could also set package parameter values, create users and groups, assign permissions and lots of other cool stuff. I once started to write such a script for a specific project, but stopped at a point where it required a server restart after a certain package installation and the effort to solve that did not justify the benefits, as the project would not get reinstalled from scratch _that_ many times.
It would be cool though if there was some thing that could automatically generate such a script based on a running OpenACS configuration, with a clear structure and descriptive comments in it to make it easily customizeable. Has anybody looked into doing something like that already?