Noch mal zurück bezgl. CONST:
Ihr habt recht, was die Adresse angeht:
Bei CONST wird ggf. keine Kopie erstellt sondern tatsächlich bei Reference.
Solange die aufgerufene Prozedur dies mittels CONST auch so definiert ist eine Änderung nicht möglich.
Der Compiler weist Zuweisungen (auch bei Strukturen) sowie %ADDR() auf ein CONST ab.
Definert man die Prozedur extern dann ohne CONST ist ein Ändern der Struktur tatsächlich möglich.
Für die Aufruffunktion gibt es keine Signatur, die zur Laufzeit geprüft wird, so dass hier auch der Binder (CRTPGM) scheitert.

Sicherheit bietet hier VALUE.
Bei VALUE wird der Inhalt auf den STACK gelegt, also grundsätzlich kopiert. Die aufgerufene Funktion kann den Parameter auch wirklich nur verarbeiten, wenn er auf VALUE definiert ist. Bei einer Definition als CONST oder als Referenz gibt es einen Zeigerfehler beim Zugriff.
VALUE-Werte sind zur Laufzeit änderbar ohne den Aufrufer zu stören.

Klar hat VALUE insofern den Nachteil, das hier ggf. große Werte (mangls Platz) nicht übergeben werden können.