Well, perhaps for certain projects you can find a good place to draw such a line, but I can imagine situations where it moves over time (e.g. from "just my own code" to "my own code plus this one library").
reloadable essentially does what you're describing here I think...? It has you draw the kind of line you are talking about between a "permanent" part and a "reloadable" part of the program. State that you want to preserve across reloads has to be in the permanent side, so you would have to carefully tune where this line falls for your particular project.
That's a lot more fiddly than environments like Common Lisp, Julia, Clojure (along with Java and others on the JVM), etc. which allow editing a function's behaviour while retaining surrounding state without needing to draw any boundaries in advance. Now, I am sure attempting bring this form of "surgical" function replacement to Racket would be quite a complex task, especially once you work through the complexities of modules, macros, etc. which are all baked quite deeply into the guts of Racket's core.
Perhaps, but I assume you'd still be drawing lines in advance around specific variables or structs to be reloaded...? I fear there's still lurking complexities in this direction, but I'd be curious to see more if someone tries to go down such a path.