I have a similar configuration to you, and suffered similar problems
by the sound of it.
In answer to your questions, here is what I have uncovered:
1. I've not yet found a way to make X automatically switch, and haven't
found anyone else that has either. Setting both intern_disp and
disp has some interesting side effects, as you noted, and doesn't really
seem to work.
2. To make the swap automatic, I added lines to rc.local to test for
source another script during the bootup sequence.
This script moves the current XF86Config file out of the way, and then
does a test using ifconfig to see if eth0 is set up. This is defined
as the 3c905 interface on my docking station. If so, it copies
a file for the external monitor to XF86Config, and if not, copies over
the LCD definition. This gets around the multiple config files and
auto switching nicely.
3. I'm not too sure about this, as I defined my XF86Config files
Maybe you should think about writing another set of scripts to switch
over the XF86Config files and restart X for you.
I had plenty of fun getting the NeoMagic 256ZX working, and still have
occaisional glitches, so if you discover any more hints and tricks
way, I'm always grateful for more information. Most of the
I've used can be found on http://wkweb4.cableinet.co.uk/~khall/linux,
copies of the scripts I used for the autoswitch.