Yes, I expect Win 3.x to work on modern hardware. That's what compatbility means. I shouldn't have to buy some other emulation scheme (assuming it exists).
It's the OSes fault that it's incompatible with previous windows API. I won't even mention I/O ports yet, but suffice to say that up to windows 98SE, they were backward compatible on API level as well as I/O port level. Windows 98SE was the LAST good OS by Microsoft. It allowed direct port I/O and APi access just like Amiga OS.
I think you're in a very small minority. Not being able to access I/O ports from every program is a good thing, I don't want everything to be able to access my hard drive directly. You can access I/O ports on x64 versions of windows, but you have to have a signed driver installed to do it.
Also, not everyone wants to pay extra so their hardware will be compatible with windows 3.1.
Before Windows 7, every graphics card had to support 256 colour mode X. Which was a clever hack back in 1995, but these days it just adds cost.
To run Windows 3.1 you'd need your VGA card to support planar graphics modes, which I have no idea if mine supports. 99.9% of people in the world have no use for them. So if they are sitting there on my graphics card, then I've had to pay for them.
If you really want to run 16 bit software, then a 32 bit Windows 7 would be your best bet. I wouldn't use it, because 32bit has more security risks but if you'd rather use Windows 98 then it's going to be better than that.
Well written 32 bit software should run without any problems. What you're trying to use is probably just buggy. You can't blame Microsoft for that (although they do go out of their way to make sure big name software works, no matter how badly written it is).