The thing is that you can't inject a static context in Java. On the other hand you can of course inject an DebuglGL instance into something which needs a GL(interface) object. With this you can circumvent the overhead you are pointing at.
To go on with this a bit
, providing interfaces for all the different OpenGL version and letting them inherit from each other;
i.e. GL3 -> GL2 -> GL
does help to make the API more easy to use.
For example in LWJGL I always have to guess in which OpenGL version a specific function or method was added, I know that something is included in 3, but dunno if it was added in 1.0 1.2 or 1.5.
And something like this makes your codebase more type-safe of course. You can i.e. code with this in a way so that you can't use code which uses Shaders, when you only have a GL1 Context and not a GL2 one.