Конечно можно и так написать:
CONST
unknown = 0;
...
VAR
arr : POINTER TO ARRAY unknown OF CHAR;
...
NEW(arr, len);
Я некий левый MALLOC использовал лишь для того, чтобы показать, что это все можно легко сделать библиотекой а не частью рантайма/компилятора.
Кстати, вот что было бы точно полезно ввести, так это ещё одну встроенную функцию: TYPEID(Val) и TYPEID(Type), функция должна вернуть целочисленное уникальное значение для даденого типа соответственно переменной, или типа.
То есть:
intTypeId0 : INTEGER;
intTypeId1 : INTEGER;
intTypeId0 := TYPEID(INTEGER);
intTypeId1 := TYPEID(intTypeId1);
ASSERT(intTypeId0 = intTypeId1);
Это позволит писать собственные библиотечные аллокаторы.