Решение может быть таким (БЕЗ утверждений, что возможные интерфейсные изменения - это плохо):
Уточнение:
а) добавление по второму пункту следует делать методом TC_InsertControl - он не является конструктором (в отличие от TC_Insert), а просто честно "регистрирует" нужный контрол.
б) Собственно не факт, что дочерними обязаны быть именно панели, что и достигается запросто в этой технике.
в) И тоже не факт, что все детишки обязаны быть "зарегистрированы" в табе... Все прекрасно работает и без этого. Пробовал (в "чистом" KOL - бодался ведь) так к примеру: "незарегистрированный" Edit с Align=caBottom, и куча "зарегистрированных" панелей с Align=caClient - прекрасно все работает.
г) да, и пустой TabControl правильней делать конструктором NewTabEmpty