For years developers used C++ without most of these features and built great code. So this is not the problem of C. There are still lot's of great code done in C.
Still you see lots of plumbing: 1. call of init functions 2. unsafe array/pointer usage 3. goto
I rather use C++'s functional constructs rather than the imperative ones. It is less code, that directly self-explains the business logic; instead of being littered with (unsafe) plumbing code.
And IF I find a performance bottleneck - I can still opt to use/develop an unsafe lowlevel version.