wie ts vorgeschlagen hat ist sozusagen die "ideale" procedurale programmierung,
wirklich alles in Procedures zu packen, und nurnoch den Main()-aufruf im hauptcode zu haben.
afaik schließt das dann aber die verwendung globaler variablen komplett aus.
(jetzt bitte keine diskussion über das für und wider globaler variablen -
das hier ist eine anfängerfrage betreff des einstiegs in prozedurale strukturierung,
und nicht ihrer vollendeten anwendung.

)
natürlich wäre es am besten, jeweils die code-abschnitte zwischen Label und RETURN in eine proc zu packen.
wenn jeder der einzelcode max. 500lines hat, sollte das auch nicht das problem werden.
du musst aber sehr darauf achten, welche variablen du gemeinsam verwendest.
diese musst du entweder als argumente/parameter an die procs übergeben,
oder per Global bzw. Shared allen zugänglich machen.
ACHTUNG: bei Global oder Shared hast du wieder das problem von programmübergreifenden namensgleichheiten.
es wird zweifellos einige mühen kosten, mehrere auf GOSUB basierende kleinprogramme
auf prozedural umzustricken und in einen einzigen code zu packen, aber wenn du das geschafft hast, dann kannst du's wirklich.
zu der lösung mit mehreren EXE:
die übergänge wirst du nicht auf die schnelle mit akzeptablem aufwand weich bekommen,
und das sollte auch nicht deine priorität sein.
der vorschlag von AND ist zwar eine gute anregung, aber das ist schon ein thema für sich.
außerdem hast du nichts davon gesagt, dass du mit fenstern arbeitest,
und für einen fullscreen ist AnimateWindow() afaik nicht anwendbar.
grundsätzlich ist aber parameterübergabe nicht das problem,
da du sowohl bei RunProgram() parameter angeben kannst,
als diese auch im aufgerufenen programm auswerten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.