https://www.freepascal.org/docs-html/ref/refsu102.html
All identifiers in the interface part of a unit are valid from the point of declaration, until the end of the unit.
This may, or may not mean to cover what you try (really to vague to be able to say if it does).
They are valid to the end of the unit. And as your can test, if you try to declare the same ident again (within that unit), then you get an error (not speaking about locals, or nested in classes, that is a different scope).
EDIT: Which would mean, that if anything: If declaration in another unit would try redeclaration, then that should give an error too.
Further:
The rules of unit scope imply that an identifier of a unit can be redefined. To have access to an identifier of another unit that was redeclared in the current unit,
The page only speaks about "redefining" an identifier that was declared in another unit. (The wording could be better, as you need to read the 2nd sentence to gain that clarity).
It does not speak of that you can (in any way) redeclare any identifier within the unit in which it was declared. Of course it also doesn't state that you can't (but if it was a feature then it should).
So I would say that the observed compiler behaviour is likely as wanted by design.
If indeed so, then the documentation should probably say, that declaring an identifier, will also redeclare (override) definitions from uses still to come.