Why does the library itself not use OTP? You seem to have re-implemented a lot of what OTP already gives you (such as gen_server and the supervisor tree).
While chasing the performance goals that I had, I ditched OTP. However, it has now become obvious that it would make sense to just use gen_server and gen_supervisor, instead of rolling it on my own, like you said. That is one of the next things that I plan to work on.