I don't know much about 64-bit code, and less about OSX. I would think that if you say "rel", that would make your code inherently position-independent.
However... you seem to be actually assembling as "-f macho32", not "-f macho64", in which case "rel" would not be valid (although Nasm does not complain! Bug?). As "-f macho64", "rel" is okay, but defining rbp as ebp fails. So I'm a little confused just what you're doing.
If it "appears to work", that's a good sign. Is there some way you can force your .so to load at a "non-preferred" location to test it? Linux won't relocate a .so at all (AFAIK), so I don't know what macho is "supposed" to do here.
Sorry I can't help more. Good luck with it!
Best,
Frank