You can fix the code execution limit with the axiom fullrene. It allows you to use all the memory instead and the program should work, but still show the error.
I had problems using Fullrene with emulators. CrabCake however always ran fine.
So ok, maybe Fullrene works and it's the emulator the problem, but I'd assume that CrabCake is less hacky and potentially less likely to crash.
Also, you never mentioned that applications can't modify internal data... that would have been useful...
I think it's not mentionned anywhere in Axe because it's not Axe specific. But it has been said many times in many topics, and the differences between apps and programs are common knowledge. It's almost like knowing the dimensions of the screen.
-Apps don't need to be in RAM to be executed (so you can unarchive bigger appvars for example if your program is an app)
-Apps always have a size that is a multiple of 16384 bytes, and in Axe, it's always 16384
-Apps can't modify their content
So yeah, that's your choice, according to your needs. But on the other hand, I don't see why people use Buff and stuff like this when it's not necessary. It just triggers writeback when you could have used saferam areas for the same purpose.