If the points you brought up were simple, it is much more likely they would already be solved. The problem with these things listed is there is a massive amount of complexity in the edge cases.
That may be true, but I also find that too many things get "rebuilt" instead of "completed".
Rust is currently suffering from this in its libraries to a very great degree. Take XML for instance--the Rust alternatives are all missing quite a few features, but so is the wrapper for libxml2.
So, what do you choose when you need one of those missing features? You can 1) try to add it to the Rust libraries, 2) try to add it to the wrapper, or 3) just wrap the C library yourself with the features you need.
I find myself using Choice 3 (which I'm grateful I can do in Rust) more and more because I'm tired of incomplete Rust libraries that look like they do what I want until I start hitting those "corner cases".
Yeah this is probably related to the 80/20 rule. I do it myself. I get 80% of the way through a project in 20% of the time, see the finish line and what is between it and myself, and kind of check out unless there's someone pushing me.
It makes sense that people see a library, notice the problems, start their own - then stop at the hard stuff. And people like yourself who might have the talent to fix it will also have the talent to work around it in much less time with far higher reliability by reusing something else.
https://xkcd.com/927/
If the points you brought up were simple, it is much more likely they would already be solved. The problem with these things listed is there is a massive amount of complexity in the edge cases.