1. It's a mountain of work and loads of people involved are doing it in their limited spare time.
2. It's even more of a mountain of work because Linux developers have to write all the hardware drivers themselves too. On Windows drivers tend to be written by device manufacturers but that rarely happens on Linux because it's very difficult to write closed source drivers and they have fewer Linux users anyway.
3. A large proportion of Linux users and developers have drunk the Unix kool-aid and think that everything should stay exactly as it was in the 70s. Text based config files, services controlled by Bash scripts, etc. It's pretty much impossible to make a reliable modern system with Bluetooth, WiFi, external displays, hotplugging, etc. with that attitude.
4. Hardware makers only test on Windows so some of the bugs in stuff like suspend are probably hardware bugs that Windows happens not to trigger.