Есть три варианта, как это сделать:
1. Создать данные нового виртхоста в нейтральном месте (SQL, MQ, key-val storage или временный файл).
По крону или через судо-скрипт запустить импорт этих данных в файл + последующее удаление, если импорт был успешен.
2. При установке панели сделать postinstall скрипт, который создает директорию, принадлежающую www-data в /etc/nginx/virtualhosts/ - тогда рут не понадобится.
3. Не держать виртхоты в этом месте вообще. А держать их в SQL или LDAP.
Последнее вообще является, пожалуй, самым элегантным путем, потому что позволит дальше перейти на Zero-configuration подход (будет у вас масштабирование красивое, по уму).