This is definitely different from classic Lisp, classic Smalltalk, and the "Workbook" philosophy of Jupyter and similar systems. I would argue that the basic question is whether it's more important to you to be able to develop reliable software that is free from defects and will work reliably in the future, or whether it's more important to be able to get results quickly, and avoid recomputing potentially very expensive pieces of data. Both are totally legitimate work modes!
I'd like to clarify a misunderstanding which I feel is common in the Racket community w.r.t. the benefits of image-based development, and the drawbacks of lacking it. Of course, I don't mean to accuse you of stepping on toes or anything; this is IMO common across said community, and since I randomly happened on this thread while browsing just now it seemed a good opportunity to try to clear it up.
The benefits of being able to reach into an existing module and change its components in a running program (i.e. image-based development) aren't just that you get to avoid recompiling code, but let's go into that first for completeness. The development benefits are discussed at length in many other places (one example), so I will assume they're already part of the common ground here.
The other thing I want to point out is that this flexibility also extends to the language itself. Not only can programmers redefine code while a program is executing, but the code can be structured to take advantage of the compiler's metaprogramming abilities to rewrite itself; redefining forms at runtime, generating new packages, etc. In "normal" code this is not an advantage, as usually you have no need for self-rewriting code. However, the more you work on fundamental frameworks (e.g. writing DSLs with actually-complex behaviors, or full-fledged general-purpose languages), or alternatively the more esoteric your domain becomes, the more often you find need for code that manipulates other code at runtime, not just at compile time with macros (assuming you don't go for Greenspun's Tenth Rule to get around this constraint, ofc).
For a personal example, in my spare time I'm currently working on learning symbolic AI and researching UX for programming languages that allow direct manipulation of computation graphs. From the development-benefits side it would be very difficult to experiment with e.g. genetic programming if I needed to recompile the package every time I want to change something totally-unrelated to the cached domain-state. From the code-rewriting side, it would be similarly troublesome to wrangle with file-manipulation, a custom module system outside Racket's own, and/or custom DSLs and function-tables to modify variable-values and properties from other modules; this is a prerequisite to the genre of compilation / type-propagation I'm aiming to implement.
(Note: I'm sure someone somewhere has done at least one of these examples in practice, but even if solving said example would eliminate the more abstract point I'm making, proof-of-concept does not necessarily translate to proof-of-practicality)
Aside from the above benefits of avoiding recompilation, the other benefit of image based development is that you get to change the behavior of a module you don't own, rather than being beholden to the designs (and mistakes!) of the original developer. There are two general ways this can be useful:
One way redefining systems you don't own is useful is if you're dealing with circumstances the original authors may not have predicted and are too un-responsive (or otherwise out-of-contact) to request a fix from. In that case, one option for image-based languages is to download the library module directly from the source, modify constructs which are in the API contract (and so have well-defined behaviors), and then use it as normal, including with any other libraries you use but don't own that invoke the initial library. This is something I have done multiple times in Common Lisp programs. The other main option in this circumstance is to instead maintain a full-fledged own fork of the library, which means you need to take up the friction of forking it, publishing it, and ensuring that anyone using your library also uses your fork of the library you needed to modify.
Building off of the above, if we decide not to support modifying behavior inside existing modules, then that indirectly prohibits most non-mathematical libraries from being relied on independently of their maintainers. Users can't fix a library's flaws or gaps themselves unless they take up ownership and publishing of it, so as soon as a library's maintainer steps back from the job, the userbase needs to either immediately find another maintainer to take it up, or seek out an alternative even if it's technologically inferior. This dilemma remains even if the maintainer has a set time at which they promised they'll be coming back; it's not like users don't have to write code in the meanwhile!
Lacking the ability to reach into other people's modules also increases the friction to picking up maintainership of an open-source library. You can't play around with fixes and deploy them in your own code (incrementally working towards a place where you're confident enough to own the library and upstream your fixes there), so instead you have to either commit to maintainership from the start (and know for a fact that you have both the domain knowledge and bandwidth to handle it) or give up on using the library. This works against the ideal that a language ecosystem should be stable over time and only minimally require major-version-upgrades or library-switches in order to maintain availability.
Aside from the above, another way redefining modules you don't own is useful is in writing extensions. This is essentially the same process as fixes; you have a situation that the original module authors didn't anticipate, and there's no way to address it without either accessing internal variables/architecture of the existing module or to redefine the module entirely on your own (or, again, to not use the library, which is of course its own can of worms). Having these kinds of limitations on the ability of others to extend an existing package with custom functionality is a significant constraint on their ability to write their own code without the explicit support of the library authors they depend on; we're replacing dependence on the code level with significantly increased dependence on the human level, which is far more problematic!
(And no, the fact that you are to some degree already dependent on library authors to not do something ridiculous in the code-as-written does not amortize the new dependency of needing them to actively maintain their libraries in order to safely use them in production, nor do I expect that the slight reduction in the former from black-boxed modules outweighs the costs of introducing the latter)
Stepping back a bit, the lack of even optional support for image-based programming is honestly the primary (though not only!) reason I haven't dug deeper into Racket than necessary to understand some of the interesting libraries in this space (e.g. Turnstile+). I have other concerns (for instance, pretty bad introspection compared to e.g. Common Lisp and a lack of an inbuilt effect system for error/signal handling), but they're mostly things that could be fixed either by creating libraries or by working with the developers to improve the basic language runtime.
However, this particular gap is a barrier to both my development style and parts of my domains of interest, and the maintainers don't seem to have any intention of filling it. I'm not willing to invest in getting a proper intuition for a language that doesn't fit either my niche or my normal use-cases unless it becomes required by an employer / community or gets such a larger ecosystem than other Lisps as to be worthwhile despite the flaws in the runtime itself.
From the other side of things, to my understanding (as a novice Racketeer and somewhat-experienced Common Lisper) anything Racket does that image-based Lisps don't do can be implemented with macros and reader-macros, so there's no hard barrier on possible programs to worry about from using a runtime with image support instead. If there was some inherent benefit from the lack of image-based development that couldn't be gotten any other way, then it may be worthwhile to see if that benefit is worth the price. However, the only communication I've seen so far is that it "increases predictability" by making sure other developers can't design their own systems the way they want, which sounds to me like a lack of a proper optional-typing system around runtime modification side-effects (or a culture that gives a similar guarantee of modifications happening only if necessary, until such a typing system could be implemented), rather than a reasonable justification for intentionally constraining the possibility space of developer programs.
(When it's necessary for a design of any sort to constrain power-user behavior, the correct solution is nearly always to instead constrain the defaults while still leaving escape hatches. This maintains the desired default-state, while still addressing domains/problems where the unusual design pattern is genuinely necessary to either solve the problem at all, or to solve it within investment constraints)
If some experienced Racketeers read this, please let me know your thoughts, and any misrepresentations w.r.t. things Racket can do that I may not have encountered yet! Lisps in general are a gift to the programming world in comparison to most other languages I've had to work with, and I'd love to see if there's a way to improve Racket to resolve the issues mentioned above.