The practical application of these foundations is the field of programming language theory. At least that is the application I know of.
Whether programming language theory is practical or not depends, I think, on your attitude to programming languages. For example, if you think C is a masterpiece of clean and elegant design I suspect you won't have much time for programming language theory. If you think C is riddled with mistakes, then you will find solutions in programming language theory.
You do understand how a mathematical Theory (a set of true propositions made by relating operations i.e. from axioms and inference rules) and a Model (a set of elements with all the operations defined and where all the propositions are true) are related, i presume?
PLT is not one theory but a set of theories from which you are free to pick and choose any subset you would like to model in your language's abstract machine and syntax/semantics.
C simply chose a "minimal theory" and there is nothing wrong with that.
C arguably doesn't actually have formal semantics, the struggles of the standard committee trying to figure out the pointer provenance being one obvious example.
C does have formally defined semantics as given by the standard but chose to leave some open-ended to give compiler writers more freedom in the form of a) Unspecified behaviour b) Implementation defined behaviour and c) Undefined behaviour.