Store each vhost in a separate file (well, not a requirement but seems easier to manage) and put them all in a folder that apache can write to. Make sure apache reads this folder with something in the httpd.conf like:
Then all you need to do is add a httpd reload script like the one I linked to here:
Of course, unless you trust your users a lot you'll want some verification that the data is good and that the newly generated config file can be used. You can do this by doing httpd configtest or reading the results of httpd reload...