Actually, there is no good reason to disallow the subtraction of two plain/untyped pointers in Pascal.
A plain/untyped pointer is an address, the type it points to is unknown since it is untyped but, there is no doubt whatsoever that it is an address. Subtracting two untyped addresses yields the number of memory units between those two addresses and, in today's computers, a memory unit is a byte.
Therefore, the subtraction of two untyped pointers should yield the number of bytes between the two addresses.
The really important thing when subtracting pointers is that they MUST be of the same type, otherwise the subtraction is senseless. For instance, subtracting a pointer to a boolean from a pointer to a qword, makes no sense because the unit of distance between those pointers/addresses cannot be established.
In Pascal, an untyped pointer is the address of the minimum addressable memory unit, i.e, a byte, subtraction of such pointers should be allowed just as they are allowed on ^byte (since they are implicitly pointers to a byte.)
Note that in C, a void* is _not_ semantically identical to a Pascal untyped pointer because in C, there is the concept of a void item/object. That does not exist in Pascal, i.e, there is no ^; (pointer to semicolon, which would be the Pascal "pointer to empty", overloading the semicolon to mean not only empty statement but "empty anything" (which is C's void)) IOW, by definition, in C a void* doesn't point to a byte instead it points into nothingness and it makes no practical sense to subtract nothingness from nothingness. If C allowed the subtraction of two void* then the only possible result would be zero reqardless of their value because they both point to the same thing: nothing!