This is interesting, although I'm a little confused about how the scheme outlined by L Spiro works, specifically:
If the new total is the same as the last total, do nothing. Leave indices as they are.
Is it not possible that the total could be the same between two frames, but that items in the render queue (after culling) are different? In this case the indices won't necessarily point to the same items as in the previous frame, and the queue would need to be re-sorted.
Writing your own wrapper can be quite a good way to explore the API, but be warned that it's easy to get bogged down trying to 'redesign' OpenGL. Personally I just use some simple object-oriented wrappers that handle things like creating textures/framebuffers/shaders, plus some logging/debugging stuff.
Like Promit, I have a somewhat hacky preprocessor which manages #includes but not much else. For experimental and small scale projects you don't really need anything more. A serious renderer would probably require a more complete system for things like generating shader permutations. External #defines are a good mechanism for that sort of thing.