Take a look at LibGDX, specifically the SpriteBatch class. It's not the best-organized class (it fails to separate the GLES2 renderer from the other with anything other than a bunch of if/else statements sprinkled throughout) but you still get a good idea of how to do geometry batching. You don't have to clone it, it's just an example of how you might do one particular sort of object management.
Object management is pretty specific to the sort of game you're writing, and it's one of the things that distinguishes a good engine from a great one (just ask princec about managing VBOs). OpenGL makes it a lot harder than DirectX (where you have things like swap chains managed for you) but on the other hand, being forced down to a low level means you at least get control at that low level.
Okay, I am going through the class but I cannot tell what is going on. The SpriteBatch has a draw method which calculates vertices and then passes them to a mesh. Then the mesh has a render method which calls glDrawElements. I can't see were the vertex arrays and buffers are bound.