It's about 7:20 in the AM here, so bare with me.
To answer the direct question asked by the original poster:
1. The "you can't make money by kernel level programming" or, even worse, "you can't make money by open-source programming" ideas
2. The lack of patience new developers have to search for something inside code not google
3. The fact that most new developers do not understand the idea of hacking because they are developers, not hackers
4. Lack of documentation and other excuses listed above in other replies
5. The fact that the code base is already stable enough in most circumstances and does not require modification in order for something to be programmed on top of it
POV: One can create userland code to maximize the efforts of the kernel and one can tune the userland available options in the kernel. I, for one, don't try to mess around with something that works. And another thing. When you try to understand how to kill a userland daemon (ie PulseAudio) and fail miserably only to find that most people will tell you that in Ubuntu it is better, for your purposes, to remove it completely, you start to get a sense that you're using Windows. Ubuntu and friends make the user lazy. I'm not trying to start a flame war (does it even exist anymore?) but, with the introduction of HAL and PulseAudio and the other crap that you need to print the tree to in order for you to find out how your OS works, everything has, more or less, gone sideways.