I think those points are just the symptoms. The real problem is having an out of tree dependency on LLVM. It is too much work to keep up with. The LLVM project does not care about breaking their external users' code.
I mean, fundamentally, keeping a C++ abi backwards compatible is a horror story. It like, just doesn't work, for non-trivial projects. So LLVM breaks all the time.
https://docs.julialang.org/en/v1/devdocs/llvm/
Julia got like 12 custom LLVM passes. They are deep into the LLVM. And they seems to include C++ headers from the LLVM project, not using the C api.
In practice you'd want insider maintainers in the LLVM project to guard your dependency like it would have been an in tree front-end.
I say this as one of the devs that usually do the work of keeping up the latest LLVM.
Imagine trying the build something around gcc's internals, just because the gcc project exposed those as a public API and marketed it as such.