I actually happen to agree with your premises. I am behind learning about "newer" things like acadYYYY.lsp and such, and I still use S::STARTUP in the way it was first made available.
There was a time when Softdesk or Land Desktop defined S::STARTUP as an SUBR, so I wrote the following to handle the otherwise inability to append to it (not being a list):
(cond
((not S::STARTUP)
(defun-q S::STARTUP ()(do_this)(do_that))
)
((listp S::STARTUP)
(setq S::STARTUP (append S::STARTUP '((do_this)(do_that))))
)
((member (type S::STARTUP) '(SUBR USUBR))
(eval
(list 'defun-q 's::startup ()
(list s::startup) ;; NO QUOTE
'(do_this)
'(do_that)
)
)
)
)
Also note that whatever is defined last in S::STARTUP may override (redefine) what was defined earlier. That's why I appended my code.
Of course one should take that approach only if one knows what one is doing.