My question is how do people change things in there contract after they have published it, since the ICO contract and the normal contract of a token are usually the same, how do some people have the option to extend or shorten there ICO or change things in there contract without making a new contract and changing the contract address. Working in Remix Solidity IDE. Like doesnt the whole contract have to be finished in the same block? how can someone make a new contract and merge it (i guess..?) into the original token contract.
They don't. That's the whole point. Ethereum wouldn't be a trustless ledger if people could just change things.
If you want to change or upgrade your contract, you need to set an upgrade path.
Here is a question that runs through this.
The long and the short of it is that you should abstract your core functionality and setup an entry contract which can delegate calls to the appropriate (upgradeable) location.
You're "not supposed to" but there are things in development such as zeppelinOS that works around this limitation. This used to be almost an ideological discussion, on one side there are the traditionalists, those who think that whatever is in a contract code should stay the same, the same people who stayed on ETC after the hard fork.