Вам не нужно отделять код, вам нужно отделить логическую функциональность, решая, что будет продаваться в каждой единице.
Затем в каждой точке, где требуется эта функция,Вы проверяете, разрешает ли пользовательская лицензия эту функцию.Если нет, то вы либо скрываете пользовательский интерфейс, либо отображаете лицензионное сообщение о том, что модуль не был приобретен.
Таким образом, вы можете продавать обновления, которые изменяют только лицензионный ключ и не требуют переустановки.