You are certainly right in part; limited developer time is definitely part of the problem. But not all of it.
In the case of the canvas, the situation was that the "official" libgnomecanvas was not being actively developed, with there being another five or so separate canvas implementations, each slightly different. So the issue here was not lack of manpower, but wasted manpower. If the core canvas had been worked on to fix whatever it was that necessitated each of those forks, there wouldn't have been a problem. Yet eight years on, libgnomecanvas is still unmaintained and is still the default canvas. You still can't properly construct objects and extend it without this unapplied patch! And this is just a single example, there are plenty more for other libraries, but this was just the last one of many which for me, was the straw which broke the proverbial camel's back, since without it, the canvas was unusable. And it still is!
It was (and maybe still is) the case that you were often recommended not to use the official libraries, but separate ones (e.g. egg*). And additionally not to use the C API; which you have to use in practice if you want to integrate properly by creating your objects. What sort of project recommends not to use the primary API?! The language bindings were also perpetually buggy in a myriad subtle different ways. Which ones were the best to use to develop quality applications? In practice, it turned out to be none of them, which is a crying shame. I ended up spending more time working on bugs in GNOME libraries and bindings than I did writing my own application code, which is far, far from ideal, moreso when the patches end up getting ignored and you're blocked again and again from just using the libraries as intended.
The end result is that GNOME, as a software development platform, has gone from being widely used, to being largely unusable. In the 1.x days, there were lots and lots of applications being developed. Many were buggy, but it was exciting, and there was a real buzz working on things. 2.x got more corporate and stifling, and and there were fewer applications (but more polished, and with less features). But none of the key fundamental technical problems have been addressed. It's stagnated even as it looked superficially more polished. Regardless of the "shell" in 3.x, the underlying libraries and technologies used in GNOME are in large part unmaintained, and IMO this is the major problem since without being accessible to outside developers, what is GNOME /for/? The shell on its own is useless--it's only a glorified window manager and application launcher. After abandoning "network objects" and native applications in the form of GOffice, GNOME has definitely lost the focus of primarily being an application development platform, and is instead just shiny bling with little substance, since it's no longer really being used to provide services to applications of any note.