"If you need to do OOP in C, it's time to move to a more powerful language."
As long as is not C++...
As long as is not C++...
That does necessarily not mean you are programming badly, although you might be. But restricting yourself to STL and smart pointers does very strongly resemble Java Disease. You might as well switch to Java.
Throwing Rust into the pool
If you want full control and easier interfacing with the OS, C++ is probably a little better, but Rust is definitely a little easier to work with once you learn the language.
Of course, so is D...