Another current topic is 3D engine abstraction, which would allow to replace Java3D e.g. by Xith or jME.
How much engine abstraction do you want ?
Switching an entire engine would be hard and i don't really know why you would want to do that. The java game engines i know currently in activity, xith, jme and agency9 all have a renderer class sort of that allows those engines to switch between one of the opengl bindings or just use a software rendering api (correct me if im wrong). This is a sort of abstraction.
Another type of abstraction is scene-graph abstraction. In this case i don't know of any Java engine thst does this except perhaps xj3d (through x3d) that isn't really a game engine. If you really want the maximum of abstraction possible build a game engine that reads x3d (with the extensions for suporting shaders) and let your game be truly data-driven.
You don't need to do this the way xj3d does (interpreting a set of x3d files). A more flexible way would be to create a x3d to java source translator then compile the generated java source. You could have different translator variants to translate to different engines.
Thats my sugestion.
NOTE: Blender has a nice x3d exporter, something also made opengl and jogl exporters for blender. If you know something about Blender and python you could consider making a blender exporter to your choice of engine source code.