Take Tetris as an example. You'll most likely end up intertwining movement algorithms and game logic for obvious reasons. The pure engine part (concerning graphics at least) boils down to about 10-20 lines of OpenGL statements then (initializing stuff, showing background pic, painting cubes in display lists, painting letters..).
I think the best advice is: Just get started! And make a simple game. I don't know, something on the level of Pong.
You'll make mistakes anyway and a big part of the learning is of course done in the process. Don't think too much about weird stuff like shaders, GJK or Carmack's Reverse, that'll just confuse you
If you know how to initialize an OpenGL window via C++ and how to paint texture-mapped cubes that move when you press keys, you can already make an awesome game.
Edit: Oh, if you like Java, you could check out http://lwjgl.org/ - OpenGL available from Java via native interfaces. Even with OpenAL for the sound and support for custom controllers. It's a good starting point imho. And there's also NeHe tutorial code available for it.