Ideallty, it the game engine should be a "hub". As such, it should implement the game loop and the scene graph. During each iteration of the game loop the game engine should process each game entity by making requests against the graphics engine (and other engines).
The graphics engine should be responsible for loading, rendering, and disposing of game entities AND recovering itself (if necessary). The graphics engine should also maintain resource pools for the loading (and sharing) of graphics resources such as Fonts, Meshes, Textures, and Shaders.
Previously the game engine was handling all of these tasks - and as such it was getting more and more difficult to maintain.