If you engineer a system that backs the company into a corner of "we can never upgrade," then you're a crappy architect.
Sometimes the we can never upgrade is part of the job description. A lot of control software for industrial systems is like that. You do not expect to be thinking about having to upgrade the core code for at least a few decades, as downtime for development and testing is obscenely expensive.