Basically what an emulator does is act as a translator for system calls.
Picture the following situation:
unix program running on an emulator on windows wants to read from the hard drive. It calls the relevant function in the unix kernel. The kernel then attempts to access the relevant piece of hardware. This access is instead directed to the emulator. The emulator then converts this to a windows call and passes it to the windows kernel (which probably crashes
) which does the access and then the return value gets passed back through the same sequence (except in reverse).
In order for this to happen, the emulator must transparently intercept all calls and handle them legally. This would require examining the unix kernel and handling every possible call with either a windows equivalent or a fake event.
CygWin is not really en emulator, more of a Windows library for running specially written Win32/Unix programs. You can't just get a linux/unix binary and expect CygWin to handle it.