Не переписать, а дописать. Из моего опыта, нужно убирать «горячие точки» — места, которые часто меняются (часто коммитятся в SCM). Как правило, в некоторых местах додатются замены типа вместо «взять X и сделать Y» пишется «для всех X из Z сделать Y». В математике для этого дела есть специальный оператор, но я, к сожалению, не математик. :-) Это можут быть разные варианты реализации, например, .d-каталог для скриптов или конфигурационных файлов или, например, подключать через LD_PRELOAD все библиотеки, которые имеют название libmcplug-*.
После того как такая возможность сделана, новую функциональность старатся делать отдельно от старой, чтобы уменьшить количество изменений и багов.
PS.
X-ы нужно вставлять/забирать используя только файловые операции копирования/создания и удаления (без редактирования файлов). Суть именно в этом.