The place where you're incorrect is the part where you said>end up writing mostly C anyways
Those are low level libraries. You should be wrapping them in higher level abstractions. You don't start calling libpng APIs directly every place in the source you want to load an image, that would be moronic. You have a single place where libpng is used, and all the rest of your code calls through that. Same with SDL/OpenGL. You don't call "glWhatever" directly when rendering, you have an abstract Renderer class or whatever that uses "glWhatever" behind the scenes. So, while the library APIs are C, the majority of your code ends up calling through wrappers that are not C.