It is not possible not to revised and compile the main program when adding a new sub program?
if You do not revise the <calling> program how in hell will be the new subroutine invoked
better review Your understanding of things ....
let' s categorize the environment ...
DYNAMIC CALLS ONLY
1) existing programs - main, subroutines ( might be nested )
if the only changes affect the internal processing of the single subroutines
==> it is enough to <recompile> only the affected subroutine
if the changes affect parameter/argument passing ( number/definition )
==> You will have to recompile ALL the subroutines affected
2) adding new subroutines ( any level of nesting )
==> You will have to compile the new subroutine and EVIDENTLY the main/upper level subroutine which is supposed to call the new subroutuine
but You could have found out by Yourself using Your neuron