Technically, databases are doing that all the time - at least the more advanced ones like Firebird and PostgreSQL - you can transactionally change the schema, even while the DBMS is running, and you do not expect to lose old data in the process. The data gets even updated lazily. Interestingly, there's at least one database (AllegroCache) that uses this similarity between heap update and on-disk data update to great advantage to blur the distinction between transient and permanent data further still.
> If I pass an int to a method I don't expect it's type to be changed by said method.
"Ints" are immutable, largely even on a meta-level. Most of them (fixnums) in any program are even direct (not pointers), so no mutation would affect any callers as a side effect anyway even if it were possible. At best you can redefine methods specialized on numeric classes.
But I'm still learning these things, I hope I'm not spouting some nonsense here.