How about making the standard client library's API the interface, and have it hide whatever the system is actually using?
A long time ago when I looked at designing a X11 replacement, that was my approach. AFAIK, only special X utilities used anything but Xlib anyway. And later I think this is what early revisions of Canonical's Mir did.
That's what wayland-client does.
So .. still using sockets, but not documenting how the messages on the socket look? Why?