Meine Frage war irreführend formuliert. Was ich tatsächlich gemeint habe, war eine Zusammenfassung mehrerer Markup-Kommandos wie \underline, \scale, \fontsize ... zu einem einzigen Kommando.
In der Zwischenzeit habe ich eine Menge über Scheme und Markup gelernt und war dadurch imstande, das Problem durch Studium der Datei define-markup-commands.scm selbst zu lösen, falls es jemanden interessiert:
\version "2.19.37"
#(define-markup-command (my-header layout props arg)
(markup?)
#:properties ((thickness 1) (offset 2)
(font-size 0)
(word-space 1)
(baseline-skip 2))
(let* ((thick (ly:output-def-lookup layout 'line-thickness))
(underline-thick (* thickness thick ))
(increment 2)
(m (interpret-markup layout
(prepend-alist-chain 'font-family 'sans
(cons
`((baseline-skip . ,(* baseline-skip (magstep increment)))
(word-space . ,(* word-space (magstep increment)))
(font-size . ,(+ font-size increment)))
props))
arg))
(m2 (ly:stencil-scale m 1.1 1))
(x1 (car (ly:stencil-extent m2 X)))
(x2 (cdr (ly:stencil-extent m2 X)))
(y (* thick (- offset) (magstep increment)))
(line (make-line-stencil underline-thick x1 y x2 y)))
(ly:stencil-add m2 line)))
\markup \my-header { "dieser Text wird leicht gesperrt, unterstrichen, sans und vergrößert" }
\markup \my-header { setzt man keine Anführungszeichen, wird jedes Wort einzeln unterstrichen }