It was not a hypervisor, the hardware was not virtualized. They instead used 16-bit code for the OS kernel, simply transitioning between 16 and 32-bit modes.
The 16-bit code was a dead end. It was not re-enterable, so 32-bit code had to take a Win16Mutex on every kernel code.
If you ever debugged DirectX code on Win9x, you'd remember that quite vividly. The LockSurface call that provided direct access to pixels locked this mutex, so a breakpoint in a locked section caused an instant hard deadlock.
That being said, it indeed was a brilliant hack that allowed a featereful GUI to run within 2Mb of RAM with good DOS compatibility.
The hardware was virtualized, it's even in the name for drivers on Win9x: Virtual Device Driver