Don't add any of these kludges, and instead reorganize code such that EVAL-WHEN is not sprinkled throughout the code.
IOW, you propose that the current way of categorizing definitions into separate files should be changed so that it is based on evaluation stages.
this is certainly a cleaner solution in some ways, but it also means that for example if an ensure-car is used in a macro in the same module, then it must be moved from lists.lisp to compile-time-stage.lisp.
i would even be ok with that, but it's not any less kludgy from another point of view.
i still think that the least intruding solution in the current setup would be defun-always, but it's a strong point that then one needs a whole set of new foo-always, which is bad enough to make me indecisive.