Ok, das hilft schon mal viel weiter

Statt #(define foo bar) kann man auch einfach foo = bar schreiben, zumindest für einfache Zahlen gar kein Problem. Damit ergibt sich einfach
notengroesse = 20
verhaeltnis = 15pt ist eine Variable (definiert in der Datei ly/paper-defaults-init.ly) , die in LilyPond wie alle anderen Variablen und Funktionen mit Backslash aufgerufen wird. In Scheme brauchst du diesen Backslash nicht; außerdem handelt es sich um eine Zahl (siehe Edit unten), eine Multiplikation ist also tatsächlich möglich. Du kannst also einfach
paper-height = #(* (* notengroesse verhaeltnis) pt)oder kürzer
paper-height = #(* notengroesse verhaeltnis pt)schreiben. Die Funktion * (Multiplikation) kann in Scheme beliebig viele Argumente bekommen.
#(set-global-staff-size notengroesse)funktioniert tatsächlich, aber nur, wenn notengroesse bekannt ist. Du hattest es im \paper-Block definiert, deshalb galt es außerhalb nicht. Abhilfe: Die Definition vor den \paper-Block schreiben.
Insgesamt ergibt sich (mal alles hierfür unwesentliche rausgekürzt):
\version "2.18.2"
notengroesse = 20
verhaeltnis = 15
\paper {
paper-height = #(* notengroesse verhaeltnis pt)
}
#(set-global-staff-size notengroesse)
\repeat unfold 15 { c'4 c' c' c' }
Edit:
Anscheinend wird im \paper-Block in mm gerechnet. \mm hat also den Wert 1, \pt nen entsprechend kleineren. Das kannst du dir auch per
#(begin
(display mm)
(newline)
(display pt))(im \paper-Block, außerhalb sind die Variablen mm und pt nicht bekannt) anzeigen lassen.