I think the concepts in JavaFX have it right.
Care to elaborate?
Well, JavaFX does not in any way attempt to abstract both DX and GL into a single lookalike API. It resolutely has its own set of constants and commands and a scenegraph type of structure, and it has a completely pluggable back-end on it.
Unity is the same: it presents an API geared towards doing what you want to do, not precisely how to achieve it; it takes care of the stuff at the back end using a pluggable architecture. Even the shaders are in their own special Unity language and compiled to GL, GLES, DX or whatever, depending on the backend.
It seems that pretty much all successful, in-use APIs follow the same paradigm: don't try and find a common ground between the backends you want to support and make the thinnest possible veneer between them; instead, totally hide it all away and present higher-level APIs to the end user.