I agree with the above recommendation here! If it's certain that those nested default programs won't be used outside of the engagement program, then you can house them as nested programs within the engagement program. Otherwise, it is better to have them as separate programs because in case you nest programs, the resultant Default program name and the assets within it would have a relatively long name (e.g., [Engagement Program Name].[Default Program Name].[Asset Name]). This could be misleading at other places where they're referenced too.
Also, note that AFAIK, tested, and per this post, we aren't able to move existing Default programs living outside the Engagement as nested engagement programs within it (we can still reference them in the stream, but can't move them as local assets to the engagement program). You can always clone existing programs/create a new default program under the engagement program.