Thanks for pointing out vext.vtk. I agree that it should make vtk accessible in a virtualenv, or so I've read. I have installed it using pip and still get the same error. My guess is I need to do more to set things up.
At the moment, learning gmsh doesn't sound so bad. I will probably do that but if someone else has had any success using this please let me know.
Learning Gmsh isn't too bad, no.
It can be convenient creating the geometry in Python though, so here's a hint.
I'm not sure how to fix your VTK problem (maybe pip install PyVTK?), but I believe the "import vtk" is not in pygmsh so much as in meshio, which is an "install_requires" of pygmsh according to its setup.py. Now meshio is useful too, but just to generate the .geo file for Gmsh, meshio isn't required, just pygmsh. This suggests hacks along the lines of editing pygmsh/setup.py or downloading pygmsh but not installing it and pointing PYTHONPATH or sys.path to it.