Давайте начнём с того, что откроем для себя, как пикл сериализует классы:
>>> class MyKnowHowClass:
... SECRET = '42'
... TOP_SECRET = 'Kennedi was killed by UFO'
...
>>> import pickle
>>> pickle.dumps(MyKnowHowClass)
'c__main__\nMyKnowHowClass\np0\n.'
>>>
То есть, это всего лишь "указатель", описание того, откуда брать структуру данных. Если пикл не найдёт класс там, где указано - будет ЕГГОГ.
Встроенные типы - ок. Наполняйте встроенные типы (списки, сеты, словари и т.п.) такими же встроенными типами (то же самое + скаляры) - и будет вам автономный пикл.
А с пользовательскими классами - не-а.
UPD:
Если у вас экосистема, и тем более большая, и тем более уже выдумали "формат" - наверняка уже должны быть решены многие вопросы. Например, вопросы безопасности (ваш п.4), вопросы о загрузке-выгрузке (п.3), да и много чего можно посмотреть существующего и работающего на тему лучших практик по остальным двум пунктам.