The LLVM-C API is quite powerful, and I'm planning to upstream some patch to expose additional stuff.
On the other hand, llvmlite doesn't even parse existing IR, it's basically write-only. Plus, representing the IR in Python makes it less memory efficient than using the native representation.