Yes, I have reached the same conclusion I think
I eventually decided on using the opam version of z3 and having a esy init
script that copies the dylib in the right place. That can be done easily because esy knows at any where z3 lives. A pure-opam version would include some ocamlfind
I guess.