Вы совершенно правильно написали. Только вместо POINTER TO ANYREC можно использовать ANYPTR, что то же самое.

Т.е. Array = POINTER TO ARRAY OF ANYPTR.

Для динамической перемены длины можно использовать SetLength. Он есть не только в Mt, он продублирован в модуле Mem Service Pack 4.01.

Проверку типа можно осуществлять стандартными способами - через IS, WITH.
При необходимости можно и метапрограммирование задействовать (Meta, Services).