Windows 3.1 was an abysmal mess, the "multi-tasking" it offered is a complete joke, and I wouldn't go as far as to call it an OS. DOS was the OS it sat on top of.
Windows 9x was a vast improvement, however it was a sort of kludge of 16-bit and 32-bit code. It was sort of a semi-OS in that it'd provide its own drivers for things but you'd often run into situations where an MS-DOS driver was doing the work.
My thoughts on the matter?
Considering that your average PC around these times would be:
Win 3.1 - 486 or early Pentium with about 4 - 16 MB of RAM
Win 95 - Pentium with about 32 - 64 MB of RAM
and so on...
Processors these days would run code designed for those specs exponentially faster.
So, as far as DOS goes, I would say emulate it. DOSBox does a darn good job of this, IMO. Apps that run under DOS expect direct access to hardware. Rather than try to stick a square peg in a round hole (DOS app vs. NT architecture) just provide a square hole that fits into the round hole
Sadly, many Windows 9x applications are "broken" architecturally and insist on talking to hardware directly. I'm not sure if an emulation approach would work well (if at all) here.
Or, you could somehow translate the binaries to work on the NT architecture. This would take a lot of work but would end up being more efficient.
Or we could all just stop using legacy apps. Problem solved