Yes and no. The Archive and UnArchive commands will not archive programs while running in one, just like you can't use For( loops, If statements, etc... on the home screen (you can, however, use the Archive/UnArchive commands to (un)archive data, such as variables, lists, and whatnot). By that logic, it's impossible to Archive or UnArchive one TI-Basic program from within another.
That's the 'no' answer.
The 'yes' answer is that it is in fact possible to archive/unarchive from within a TI-Basic program, but that requires you to have and run an unarchived assembly subprogram as one of your subroutines. Usually, I'd say it's more work than necessary, but since you don't mind using subprograms I'll tell you anyway.
Basically, we're going to create a z80 assembly program in hexadecimal op codes which tricks the calculator into thinking home screen mode is program mode, and vice-versa. That way, you'll be able to run If statements, loops, etc on the home screen, but more importantly, archive programs from within a program.
Create a new program and call it ARC (or whatever). Type the following in:
:AsmPrgm21F8893E02AE77C9
The AsmPrgm token can be found in the Catalog ([2nd][0]). Make sure you type that hexadecimal string EXACTLY as shown, because making a single typo could permanently brick your calculator.
Now, in your regular program, you should put the following:
:Asm(prgmARC
:UnArchive prgmSUBPRGM1
:UnArchive prgmSUBPRGM2
:Asm(prgmARC
:// your program does whatever here
:Asm(prgmARC
:Archive prgmSUBPRGM1
:Archive prgmSUBPRGM2
:Asm(prgmARC
The Asm( token can also be found in the Catalog.
It's important that you run prgmARC twice, because otherwise you'll be stuck in program mode while trying to calculate something on the home screen.
So yeah, use with caution.