Вы можете иметь доступ к опубликованным полям записи, но не можете объявлять свои экземпляры типа записи или процедуры с их использованием. Это даёт модулю, где этот тип S объявлен, гарантии того, что все экземпляры данного типа созданы только им, и, соответственно, соблюдены все необходимые инварианты, в том числе касательно неопубликованных полей.

Если объявить тип-запись публичной, а затем другой модуль объявит где-то в процедуре локальную переменную этого типа и передаст её в ваш модуль, то в неопубликованных полях (неуказательного типа) может быть мусор со стека.

Я этим пользовался, но уже не помню, где и как.