We had a pile of hacks but integrating changes took all the productivity of Smalltalk away.
However, tools like Envy/Developer fixed a lot of it. It still didn't fix everything but at least sorted code integration and source code versioning. Not sure if the product still exists though.
I loved using Smalltalk but in a team environment its useless and keeping your code disentangled from the underlying environment is a nightmare.
In addition, lisp programs (at least in these environments) don’t have “main”. I think it’s no big deal to start a program as “(foo)” but that’s surprisingly user hostile.
I worked with someone (who shall remain nameless) who ran in the same image for several years. There were random state variables scattered in his environment that affected the performance of his system in unreproducable ways.
But they have similar mechanisms.
In Symbolics Genera 'programs' are called 'activities'. They can be started by keyboard shortcut, command, an application menu or by a general function, where the activity is an argument. Usually each 'activity' runs a command loop.
Additionally images have named lists containing functions, which are executed on certain event. For example if an image starts, a 'cold boot' list will be executed. If one has registered starting application programs (activity) - remember activities have names like editor, listener, mail client - they will be started by the operating system after a boot.
If a user logins on a Lisp Machine an init file gets executed. That init file can also contain general forms which start activities.
They are the most productive environments I’ve ever used for development, no question in my mind. OTOH they were terrible for deployment: user hostile and expensive.
Also a lot of programming is defensive: against poor or inexperienced developers including oneself. When you can casually change anything you can get into trouble, either by breaking things or by simply embedding unexpected dependencies your code.