I agree with some of what you're saying, but I think the biggest thing holding back Linux on the Desktop is all the duplicity of development effort carried out on the hundreds of various distributions. If we want Linux to be a competitor, we need to stop forking. There's clearly enough development taking place to support a competitive operating system, but we're spreading that effort too thin by trying to maintain and improve a dozen window managers, two dozen email clients, a hundred music players, and a few dozen package managers, etc. I get it, everyone thinks they have a better idea and 1 in 10 of those actually is better. But just think about how great an OS we could have at this point if all of that effort had been put into perfecting just one or two products. If we limited ourselves to one or two distros then it would be easier for all of that development work to be put into creating a standard set of gui tools for configuration settings so that the use doesn't have to open a terminal prompt to change something. If we focused our collective efforts on one set of PDF viewers / music players / IM clients, etc, we could pull together an OS that is AS polished as OS X is.
I install Linux on a "desktop" every 2 years or so just to see how things have improved and every time I do that, even with the same distro, there have been numerous changes but very few improvements. There's a new picture manager app, or a new default email client, but the feature sets haven't improved much. If we can get to that level of polish and consistency, then we'll open that door to more market penetration which will then hopefully lead to solutions for the other 2 problems:
1) Drivers (mentioned already on this page)
2) Commercial application support (also already mentioned)
Both of those are important, but their solution becomes easier if we can create a standard linux distribution that they can focus their efforts around.