т.е. для ленивого SetLength-а придётся такой код писать
Низ-зя.
Обратите внимание, что все универсальные процедуры задания размера принимает обязательный параметр PTypeInfo. Потому что массив не хранит размер элемента. Когда ты вызываешь SetLength, компилятор автоматом подставляет нужную TypeInfo, это не повторяемая обычными средствами магия компилятора.
Если приводить к array of byte, тогда обязательно пересчитывать на правильный размер элемента, ковыряя служебные поля до и после.
P.S. Придётся делать для Чеперси специализированный менеджер памяти, чтобы обеспечить любому блоку дополнительные служебные поля.