Your understanding does not seem right, though it is hard to completely understand what you said.
In Ethereum, new contract deployment is a transaction, similar to transfer of cryptocurrency, so new contract can be deployed at any time, no need to fork blockchain or start a new one.
Once deployed, contract's byte code (computer program that control contract behavior) becomes immutable, while contract state may change. Contract state includes such things as amount of ether held by the contract, data stored in contract"s storage, etc.
As long as byte code may analyze contract state and alter its behavior based on this analysis, the contract behavior, in general, may change, even though byte code may not. For example, one may deploy a contract whose byte code implements (Forth)1 interpreter, write actual contract logic in Forth and put it into contract's storage.
This way one would get smart contract with fully mutable code.
Returning to your question, there are several ways how you could evolve your contracts along with your business evolution:
- You may deploy new contract each time you requirements change. Some tricks will be needed to preserve data. See this question for details.
- You may use upgradable contract. Usually this means, that front-end contract delegates actual work to back-end contract, whose address is stored in front-end contract's storage. By pointing front-end to different back-end one may change contract behavior.
- Use interpretation technique, as in my example with Forth above.
Let me know if you need more details about some of the options.