There isn't a system routine to do that. There are many third-party routines to do so; that's exactly what shells do.
Probably the most popular approach (taken by Ion and many others since) is to copy a block of up to 768 bytes from the start of the program to a temporary buffer (such as saveSScreen), then DelMem those bytes, InsertMem at the desired location, and copy the data from the temporary buffer to the new location. Then, if the program was larger than 768 bytes, repeat as needed.
Another technique is the one used by Venus (which I belive Kalimero invented); what he does is to repeatedly swap blocks of memory, each time smaller than the last. It's a beautiful algorithm, and a marvelously simple bit of code, and it's also faster in most cases than the Ion algorithm. It will leave you scratching your head for a while trying to understand why the code works.
And to use it, you also need to know about a couple of undocumented system routines (DelVar3D and DelVar3DC), which you can use to fix up the VAT after moving programs around.