Зачем динамический product id? Просто обрабатывая покупку - запоминайте её на своём сервере.
Если у вас есть Логин или другой уникальный идентификатор пользователя, то вы по нему на сервере просто проверяете - был ли куплен довесок на этом аккаунте или нет. Если нет - отправляете запрос на покупку In-app purchase, по завершению которой запоминаете это на своём сервере. Таким образом люди не смогут перелогинившись получить ваш довесок.
Также не забудьте про функцию восстановления покупки. Если человек залогинился и у него довеска не обнаружено - он должен нажать кнопку "восстановить покупку", после чего приложение смотрит на своём сервере - покупал ли он ранее эту покупку, плюс проверяет это ещё механизмами Apple.
Насчёт покупки "второй раз купленного" - как раз у них есть 2 типа покупок внутренних, один из которых вы выбираете при добавлении её в iTunes Connect:
Один из них - одноразовая покупка, другой - просто покупка. Подходит, например, для покупки внутриигровой валюты.