Hi,
maybe the changes I did in a bigger refactoring of my LCD-lib would be of interest for you. Especially the zero-cost abstraction of CGRAM and DDRAM, which guaranties exclusive access at compile time. I also added correct handling of some rare edge cases like address overflowing.
kunerd/clerk#35
Unfortunately, I haven't had enough time to add support for the embedded-hal traits, yet. So maybe some of my implementations will be an inspiration for you to improve your API, fell free to reuse any of them.
Cheers,
Hendrik