Logically there's no need to use the type
keyword when the code is already part of an existing type declaration section. So,
type
TRec1 = record
end;
TRec2 = record
end;
produces types that are indistinguishable from
type
TRec1 = record
end;
type
TRec2 = record
end;
However, as you have discovered, the compiler has a limitation that requires all forward declarations to be fully resolved before the end of the section where the forward declaration was introduced.
There's no particular reason that it has to be that way. It would be perfectly possible for the compiler to relax that limitation. One can only assume that a compiler implementation detail, probably originating a very long time ago, has leaked into the language specification.