There are libraries between complete game engines and pure OpenGL
There are many libraries and frameworks that take the grunt of game dev, without locking you to their specific physics engine, etc.
For example
2D: SFML, Easily create a window and move sprites around, rest is up to you. (C++)
3D: JMonkeyEngine (Based on lwjgl) is basically the same, with 3D rendering instead. It contains tools for physics and collisions, but those are optional. You can do whatever with meshes in 3d space (Java)
I probably should have realized this before fighting with complete game engines (unity, godot) for multiple years even though I prefer doing stuff myself. I find it easier to handle when I've made it myself.
Anyone else know any minimal but feature-rich engines?
I was writing my first game in XNA .NET framework, and I'm really glad I had that experience. It forced me to understand (and figure out) the insides of a game engine, such as collisions, GameObject model or game loop really well, and since by that time I had no idea something like game engines exist, I learned to not take those features for granted and actually had to research and write them.
When Unity went free, I appreciated the features so much more, and now I also see that some of the newer developers have no idea what's actually happening in the background, which is a shame.
I'd recommend that anyone interested in gamedev starts more low-level, and only after that gets to more heavyweight engines. Sure, you probably won't make a 3D game, but making a simple platformer from scratch is an amazing learning experience.
All of the above are mainly for 2D graphics, but some folks made versions of LOVE3D, too. There's also libgdx, which builds on top of lwjgl, and mini2Dx, which builds on top of libgdx
For 3D, the first one that comes to mind is Ogre3D
--
I have some experience with Godot, it certainly speeds up a lot of the creation, but it also has some asinine decisions that I seriously don't understand, like keybindings being a protected array: you can't alter an item on a specific position; so, if you have a default + alternative key for an action, and you want to let players customize their keybinds, you essentially have to copy the whole array, make the alteration, delete the keybinds then add the items from the altered copy.
If you add a gamepad to the mix, making each action have 3 inputs, you also have to keep track of positions, otherwise your option to change a specific key might accidentally change from a different position of the array.
Also, never tie your platformer's jump logic to the game's framerate (delta), unless you want players running on less capable machines suffering.