Полагаю, лучше всего было бы переделать ваш код, чтобы эта проблема не возникала - такая неоднозначность в отношении владения - беспорядок.
В любом случае, одним из вариантов будет использование (подсчитанных) интерфейсов. Это проблематично в случае циклических ссылок.
Если внешне созданный объект не должен быть единственной ссылкой, вы все равно можете создать внутреннюю копию объекта, что-то вроде
procedure TMyClass.SetMyObject(const Value: TObject);
begin
MyObject.Assign(Value);
end;
Вы можете назначить внешний объект другому полю, чем внутреннее, и тогда вы не Free
это поле в деструкторе. Или установите флаг в установщике свойств, чтобы вы не знали, что нужно освобождать внешний объект ...