That's only one of the problems. Another problem is that by having all these smart people dedicate their time to solving the same problem over and over, we get stuck at the same level of abstraction. If instead of solving the same problem in slightly different ways, we iterate and build abstractions, we can make apps previously impossible to build in reasonable budgets and time, possible.
It doesn't need to be Sproutcore that we coalesce around. It could be Backbone.
This has already happened with jQuery. The JavaScript community coalesced around the framework, contributed API changes, bug fixes, documentation, unit tests, and as a result, we can operate and build applications without having to re-implement the same cross-browser, low-level code.
http://www.ted.com/talks/barry_schwartz_on_the_paradox_of_ch...