The only difference is that only programs that fully uses userspace works, and anything that uses kernel driver will fail miserably. In this sense, games worked out the best because they usually have high level of independence and self-contained, with hardware abstraction layers to make things highly compatible.
If you want to talk about similar stuff, FreeBSD have a Linux compatibility layer similar to Wine. You can use that as a reference, despite both FreeBSD and Linux use ELF, and Windows use PE.
But to be honest at the end of the day, it's just program header describing code sections, library imports/exports and relocations, and this is why you can run Windows app on Linux basically untouched, given you can reverse engineer userspace Windows API calls 100% precisely.
And the legal aspect of it, well...
Also, there is a project called Winlator (https://github.com/brunodev85/winlator) that combines Wine + Box64/Box86 to run x86 games on Wine on Android. Now that is what I call an emulator since Box64/Box86 really is one.
(It is, unfortunately, newer and much less far along, probably purely because there's less dev-hours and dollars in it)
Wine Is Not an Emulator!
Wine lets userspace code to be executed as is with the full permissions of the host system. It is more like an alternative executable format support package / subsystem. It needs to emulate the Windows system DLL calls, but everything else is no different than loading a piece of ELF executable and jumping into it.
For myself, I make every attempt to use words correctly.
But yeah I agree, wine is an awesome emulator, and these people are heroes