It looks like this is not really possible. I did end up slightly modifying the source of xscreensaver in order to force certain settings. I tried to use the least invasive way of accomplishing this with minimal modification of the source. This will still allow the user to configure many parts of the screensaver, just not the ones regarding screenlocking and the timeout.
In the source tree find the file driver/prefs.c and in there look for the function write_init_file. In that function find these lines:
if (!pr || !*pr) ;
CHECK("timeout") type = pref_time, t = p->timeout;
CHECK("cycle") type = pref_time, t = p->cycle;
CHECK("lock") type = pref_bool, b = p->lock_p;
CHECK("lockTimeout") type = pref_time, t = p->lock_timeout;
(..)
CHECK("mode") type = pref_str,
s = (p->mode == ONE_HACK ? "one" :
p->mode == BLANK_ONLY ? "blank" :
p->mode == DONT_BLANK ? "off" :
p->mode == RANDOM_HACKS_SAME
? "random-same"
: "random");
And change to something like the below source sample. What this will do is prevent these settings from being saved to the .xscreensaver file in the user's home directory. And then as long as the system wide default is set to whatever you prefer xscreensaver will keep using these settings in lieu of what would be configured in the .xscreensaver file.
if (!pr || !*pr) ;
CHECK("timeout") continue; /* don't save */
CHECK("cycle") continue; /* don't save */
CHECK("lock") continue; /* don't save */
CHECK("lockTimeout") continue; /* don't save */
(..)
CHECK("mode") type = pref_str,
s = (p->mode == ONE_HACK ? "one" :
p->mode == BLANK_ONLY ? "blank" :
p->mode == DONT_BLANK ? "blank" : /* prevents xscreensaver from being disabled, will force to blank */
p->mode == RANDOM_HACKS_SAME
? "random-same"
: "random");
The find the function called load_init_file and change the line:
else if (s && !strcasecmp (s, "off")) p->mode = DONT_BLANK;
to:
else if (s && !strcasecmp (s, "off")) p->mode = BLANK_ONLY;
Now find the aptly named function stop_the_insanity which sets some values of preferences back to sane values, such as a timeout > 15 seconds will be forced to 15 seconds. This is a good spot to make sure that when a user hand edits the .xscreensaver file instead of using xscreensaver-demo the values will not be used by xscreensaver, but our "sane" values will be used instead.
In function stop_the_insanity add something like this, using your own values if you want. Note that values for time are seconds*1000. In the case user sets mode to "off" we already force it back to blank above.
if (p->timeout > 600000) p->timeout = 600000;
if (p->lock_timeout > 0) p->lock_timeout = 0;
if (! p->lock_p) p->lock_p = True;
With regards to creating .xscreensaver with root ownership upon initial login, I think that is not really possible or advisable. You can create a script in /etc/profile.d which will create an empty .xscreensaver upon user login. But the above mentioned change makes that unnecessary.