In my experience, the open-source radeon drivers are significantly more stable. Fglrx was a stinking pile of crap that has officially been abandoned - the whole driver team has switched to the open-source drivers, now.
Linking to Theano-CUDA is always a nightmare.
Forget about optimus. That has never worked correctly on Linux.
The only reason I can see someone wanting nvidia on linux is for CUDA. And in that case, you can't just use the ubuntu pre-built version of the drivers.
If you are not doing neural nets locally on Linux, you shouldn't get a discrete graphics card. And if you do get a discrete one, make sure it's not Nvidia since their open source drivers are much inferior to AMD's.
My current (and only) working solution is to disable the Nvidia GPU on a host and use it PCIe passthrough to assign it to another Linux or Windows VM. That's the only stable solution that doesn't break the world when enabling/disabling the discrete GPU.
We shouldn't have to revert to such extreme measures...
Both are somewhat annoying, but far less than only being able to use it in a VM. That said, I'm curious about how you manage the VM output, considering that PCIe passthrough requires a dedicated screen.
In the even rarer case that I wish to play a game, I have an HDMI connection between the GPU and my projector, which I can enable with a remote control.
Learning how to use qemu is a bit of a pain (hint: use qemu directly, virus is a huge waste of time) but after the initial learning curve the setup is seamless for my use case - and I feel safer without the GPU drivers having access to my normal desktop. I much prefer this setup to dual-booting Windows for gaming. The VM spins up in a few seconds and shuts down when not in use (turning off the GPU in the process).
The binary blob provided by Nvidia have been quite reliable across the years (and I think they've been available for more than 10 years) while the open source ATI/AMD drivers have frequently failed to deliver.