In general, I stand by my assertion that the standardised preprocessor is the only important distinguishing feature between Pascal and C.
Well, I don't quite agree, but that's a matter of perspective.
I mentioned functions/procedures as parameters, you corrected me saying that they were in the Pascal definition, and I'll believe you. I didn't check. (I admit I never read the official specs of Pascal, contrary to the later Oberon and even - out of curiosity - Modula 3.) I admit I mostly used TP back then, and it didn't implement them. So anyway, let's cross that out.
But there was the matter of separate compilation. I don't think the original spec defined that, but apparently UCSD Pascal was the first defining "units", so that part was long existing too. (And in a better form than just includes.) TP didn't implement this until later versions.
So yeah, not much left missing? IIRC, you could even do conditional compilation in most Pascal compilers with "directives".
Now, outside of unions (for which I agree with you), C still was easier to use for accessing "memory" through structures than Pascal.
I don't think you could, for instance, define the memory location of a record and then access its fields to access particular memory locations as you could do with C. While the equivalent in Pascal was possible, it was not as "elegant" (that may be a matter of taste.) But here again, maybe you have a better memory and command of Pascal, and maybe that was just as easy?
Ultimately, as for later Wirth languages, the real problem was not the language itself, but the lack of existing tools for a large range of platforms.
The reason for this is a complex one - we can refer to our discussions about what makes a language popular or not. Its technical merits are most often marginal for explaining popularity.
An interesting example was Modula-3. It was *the* descendant of a wirthian language that was carefully defined by a group of industry professionals. It was fully usable, and in many aspects, would definitely still be. The tools were very few though. CM3 which was one of the few has known some kind of rebirth:
https://github.com/modula3/cm3One could also say that Ada is a descendant of those wirthian languages, and Ada is still alive and kicking, even though it's still in niche applications.