While AVR-GCC does allow some C++ constructs, the support is quite limited
Limited in what way?
The reason is that C++ can enable some bad behavior (by inexperienced programmers)
That's true of all programming languages including C. It's not a reason to choose one language over the other.
C is more rigid
Rigid? C? Compared to what? C++?