History
Reusing previous commands is not difficult in SLIME / Emacs.
The Mp and Mn commands receive previous or next input. Mr and Ms allows you to search (using regex) for input.
Execution from buffer
Another way is to write commands to a Lisp file, open the file in a buffer, and then you can execute them from there.
Reload
Your reboot idea is fine. You can close the service, download the new code, and start the service again. You must find out why it freezes. You have to debug this. One of the differences between your manual and your encoded version is this: the time between stopping, loading and starting in the encoded version is much shorter. You should check if there are any problems.
More advanced code organization
Usually, when you have several files, it makes sense to use one or more systems to organize the code. It also makes sense if your code is in the files that you use the file compiler to compile the code. This way you get warnings and errors early on. Often in Common Lisp, developers use ASDF as a system tool. Many implementations additionally have their own (with more or less functions).
The system tool provides you with some commands that you can use in the system:
- load: load compiled or source code if necessary (or forced)
- compile: if necessary, compile the code (or force)
- compile and download: compiles and downloads the code if necessary (or forced) ...
It usually produces the smallest number of commands needed to compile or download code. But you can force it to reboot or recompile everything.
Typically, a system may have subsystems. A subsystem may be, for example, a compilation service. If you change the code, save it and the compile and load subsystem. ASDF (or a similar tool) will compile the modified files and load them.
Optional: create your own commands for the system tool, which then stops the running service, compiles / downloads the changes, and then starts the service.
Recommendation:
Get your version, find out why it hangs.