I think another big reason is that, compared to desktop and web based software, embedded applications are almost always completely custom. There are common hardware specs on every PC, and three big operating systems. So you end up having huge developer communities that build all kinds of utilities, tools, and other building blocks that you can easily reuse. Usually embedded systems have a fairly simple operating system, and custom hardware, which means there isn't much reusable code, and it's up to the developer to provide a much larger portion of the functionality.