Eigentlich doch sehr simpel;-):
https://de.wikipedia.org/wiki/Prozedur_(Programmierung)

In der Theorie:

Ersetze alle EXSR (also Unterprogramme) durch Prozeduren und Funktionen.
Wobei Prozeduren nur etwas tun und kein Ergebnis liefern und Funktionen i.d.R. etwas tun/berechnen und genau 1 Wert zurückgeben.
Vorteil der Funktion: Der Rückgabewert lässt sich direkt in weiteren Berechnungen verwenden.
EXSR, die in Copystrecken stecken verlegt man dann in Serviceprogramme.

Generelle Vorteile:
Man braucht keine Hilfsfelder für Prozedurversorgung und kann die Parameter direkt angeben.
Per CONST/VALUE-Definition passieren sogar Typanpassungen (ins besonders Längen bei Zeichenfeldern).
Man kennt das ja bei EXSR-Arien:
Parameterfelder definieren und versorgen, EXSR ausführen, Ergebnisse auswerten...

Funktionen/Prozeduren können generell rekursiv aufgerufen werden, EXSR und Programme nicht.

Lektüre dazu gibt es ja genug und die Meinungen über die Art der Verwendung gehen da stark auseinander.

Ansonsten gilt für Prozeduren (fast) das Selbe wie für externe Programme mit Nomain:
- es gibt keine InzSR
- lokale Variablen können initialisiert werden (INZ)
- lokale Dateien werden geöffnet (außer bei USROPN) und geschlossen (immer)

Also Fazit:
EXSR => Prozedur/Funktion => EXSR wird verboten