My questions is, are these are specific limitations or language philosophies that means this can't be solved? I feel like it's in a deficiency of the compiler and it could be resolved using a second pass type resolution system (many languages do this already).
Pascal aims to be a single pass compiler (well, FPC isn't strictly speaking). That means that the compiler needs some kind of look ahead to be able to resolve constructs (classes, methods, etc) that at some point are not fully defined yet.
Forward declarations exist just because of that.
Multi-pass compilers are dead slow. Single pass compilers much faster, but at a cost. This is one of them.
I have some code written in C++ with an equivalent in FreePascal where C++ takes 3 minutes and FPC takes 3 seconds to compile.
So yes, for a Pascal compiler a mechanism like forward declarations is necessary.
That does not mean you can not write a multi pass Pascal compiler, the old and abandoned GNU pascal comes to mind, but is a philosophy you either love or hate: loose compile speed vs very little gain in optimization.
But you can make the compile cycle slow and multi pass by using WPO
what is great for release builds. To my mind there is not much conceptual difference between WPO and a C++ optimizing compiler.
But actually you know all that....
(WPO really works a treat on large projects, btw)