I think Celtic III would be the only way to go for that. MY approach, though, would cause only program launching to be written in BASIC, though. So there would be no data accessed from TI-BASIC. Just between Axe programs.
PRGM:RPGEXE
:0→X:Asm(prgmXCOPY
:0→X:"RPGTITLE
:Asm(prgmXCOPY:prgmXTEMP000:0→X:Asm(prgmXCOPY
:Repeat pxl-test(0,0
:0->X
:"RPGSTOP
:If 1=pxl-test(0,1:"RPGMAP
:If 1=pxl-test(0,2:"RPGBATTL
:If 1=pxl-test(0,3:"RPGEVENT
:Asm(prgmXCOPY:prgmXTEMP000:0→X:Asm(prgmXCOPY
:End
Before exiting each Axe subroutines, you would need to turn on a pixel in particular to define which routine you want to run. In addition to that, pixel(0,0) would be always turned ON when exiting each sub-routines, unless you are quitting the game! BACKUP first, though! I did not test the code above, but it's just to give you an idea about how I migth do it.
Obviously, the program would be much compex than that, but it's just to give a small idea of how to do it without the hassle of trying to access Axe appvars in BASIC.