Charles, it is not about you saying that something is bulletproof or whether C (or other language) is better/worse than PBP (or anything else). It is about how easy/difficult it is to ensure (from a maintenance/validation standpoint) that the application/system is correct and how you can validate/test that is so.

From the software perspective, you have discovered that as an application becomes more complex, it gets increasingly difficult to maintain (make changes, additions or corrections). As you have mentioned, languages having structured elements (such as functions, procedures, local and global variables, etc.) go a long way in making it so. Also, features such as pointers, structures, members and unions are very useful when dealing with complex data structures. These features are available in languages such as C.

As for hardware, having the ability to do some form of in-circuit hardware debugging is extremely useful. The ability to single step through the firmware (at the source and/or debug level), set breakpoints, inspect memory and register values, change values on-the-fly, tracing, etc. can give you a view of what your system is actually doing that is difficult to impossible otherwise.