Constant ecosystem changes make it difficult to maintain strict low-level and high-level API boundaries and drivers across platforms. To get non-trivial projects done with high quality you need very experienced engineers who are comfortable dropping into low-level code as well as fork or build in-house versions of common libraries and tools that don't quite get the job done for your use-case.
Also there's a lot of hobby projects that are great and push boundaries but they're also often the only option for a given toolchain/language/framework. So its a very frustrating exercise to invest in a tool only to realize its half-baked (which is fair for a hobby project!) and you need to reverse course and rebuild or extend it yourself - even for simple things.