I wouldn't necessarily say that C is more suitable that C++ for low-level system programming... C++ essentially translates into C before it is compiled, so they will both get you as close to the "bare metal" as you want to go.
Not always this translation result goes smooth for concrete "iron". So I used to treat just clear C notation directly for downloading to controller. But I agree with you, for ideal cases it should be so. I am not devoted programmer as I suppose you are. My respect and kind regards.
In this case I will defer to you because you've actually seen problems (whereas I thinking about it more academically, which counts for very little where you actually need to get something done).
It's ok. Everyone has own experience and I agree with you again that for most default cases c++ is quite suitable for low-level application (OSs). Simply so often we have own thinking background and suppose naively that everybody has the same. Under low-level programming I've meant for instance Atmel 51 chip either ICP-DAS 7188 controller both more fitted be C codded for small memory model. All roads are crossed-in-assembler at all.
Among the many differences, some of the big ones are:
1. C++ was built from C, to define an object-oriented language. The closest you can get to creating objects in C is using Structs, which only define member variables; while in C++, you can define member variables and member functions. A lot can be said about OO here...
2. C requires that you manage your own memory, while C++ can do most of this for you, automatically.
3. Handling of pointers is simplified in C++.
In essence, C is considered to be low-level and C++ is more high-level language. Java, which was built from C++, takes it one level higher by getting rid of the need for pointers, making programming less error-prone.
C++ does NOT automatically manage memory for you (but destructors help a bit), and I don't recall how pointer management was made any simplier in C++. Are you thinking of C# (which does both of those things?)
Friends! it's endless discussion. From machine code up to C, C++, Java etc we observe evolution vector goes from less abstract level of programming to greater. Java is working on virtually not existing "virtual machine" and eat computation resources that are believed more than enough. So nothing daunted. All should be paid. OO is great invention, but it can bring real nightmare especially facing deadline. But I do not blame OO. Everyone technology has own pluses and minuses. So I suggest to sum consensus for this topic --- C vs Cpp is the same as Pascal vs Delphi .