Ideally, you keep your important products up-to-date with the latest tools. My long-term "product" commitment at this point (in my post-retirement bliss) is maintaining the Arduino Optiboot Bootloader, and a substantial number of the patches I've applied in the last 7 years are of the "make sure this compiles (and fits) using the new x.x version of the compiler."
Keeping a set of mothballed laptops isn't an awful idea, assuming that they really include everything that you need. Certainly for a major product, you can afford to spend $1000 ...) (Or, you can do this as part of the normal age-out process for your computing gear. Every time you buy a "new" laptop, you put all your "current" products on the old laptop and mothball it.) (Alas, this ought to include external tools like programmers, as well.) I have ... a bunch of ATtiny11s that are not supported by most current device programmers. I have a programmer for them, but the host software relies on a PC bit-banging a "real" serial port. And all sorts of device programmers that connect to parallel ports...)
VMs... I guess are nice, as long as you make sure that THEY keep running (which seems more difficult than keeping the product working, in some sense.) I have ... PPC Mac Apps (and documents for them) that ran great on my G4, and then ran for years under PPC emulation on a x86 Mac. And then x86 Macs stopped emulating PPC. And there's that "parallel port device hardware" problem... Could I have found a PPC VM when the x86s came out? Probably. When the x86s stopped supporting PPC apps? Maybe. Now? I dunno - I could be looking at VMing an older x86 MacOS that does support PPC...
The problem gets "different" in larger companies. I'm sure it was someone's responsibility to make sure that entire build environments for all active branches continued to work, as the company transitioned from 680x0/HPUX build systems to Sparc/SunOS build systems to Sparc/Solaris to x86/Solaris to x86 Linux server farms, but I'm glad it wasn't mine!