There is one major issue that has held back desktop Linux, but it's not day to day usability. In fact, some of the desktop environments available for Linux arguably offer a better user experience than Windows. Here, for example,
is a video that gives an idea of the KDE desktop, which is very Windows-like, but far more customisable. The quality is pretty high.
The big problem stems from the fact that even discussing Linux as a single platform is misleading. Linux is really just the kernel, and the layer of software that sits on top of that can be as different from one distribution to another as you can imagine - to the point that different flavours of Linux can be effectively different operating systems.
This has created a situation where proprietary software, like commercial games, has a problem. When you want to release a compiled executable program, you rely upon the fact that that your customer is running a system with essentially the same software stack as you. In Linux land, this is not an assumption you can make. With open source software this isn't a problem, as each distro can compile their own versions against their own setup, and distribute them easily, using the freely available source code.
This is now being seriously addressed by both Redhat and Ubuntu. The Redhat solution, which I suspect will become the standard, is called Flatpak. Essentially, this allows software makers to build a single executable, and also define the packages and environment it is intended to run on. Then, when a user installs a piece of software, it effectively creates its own sandbox, into which it can download any pieces it needs to run properly, and create its perfect setup in a way that won't interfere with anything else on the system. It's also intelligent, so that if another piece of software has already downloaded some of those pieces, it shares them and brings them into its sandbox.
This is potentially a game changer, and is in some ways superior to the way Windows handles dependencies. In Windows, for example, it's quite possible to get errors because you have the wrong version of Dotnet or DirectX installed. Flatpak would spot that and correct it during installation, and also allow for different versions to coexist without conflicting with each other.
We're now at the stage where distros can start to use Flatpak by default, and it could make a major difference going forwards.