That is what I have resorted to in the past as well. If I had to do that again, I would probably use this add-on:
https://github.com/trinary/d3-transformwhich breaks up more of the craziness of the transform minilanguage... not sure if any extra overhead would get you if you have LOTS of transforms.
I haven't used the viewbox before, but it seems awesome... @conor: SVG doesn't work in most IE anyway, so what's the problem there?
Another approach would be to take a page from bootstrap and do this in css media queries: i.e. "projector", "desktop", "tablet" and "mobile" sub-stylesheets.
http://timkadlec.com/2013/04/media-queries-within-svg/Of course, you probably can't do transform="zoom" AND media query stuff, as that would put you back in the crazy text zone.
The "right" way to do it, though, is probably for everything to be on scales that are recalculated based on the current screen dimension, which triggers a redraw of EVERYTHING on resize (suitably debounced)... but this can be MUCH harder to do after the fact than just throwing a transform on the parent element.
Cheers!