This may work.
Make one new job, call it Job 0. When Job 0 runs all it does is add a new schedule or update existing ones to Jobs 1, 2, and 3 to start running in, say, 1 minute from now. [sp_add_schedule or sp_update_jobschedule.] That way Jobs1, 2, 3 all start work independently.
Jobs 1 & 2 run their SSIS packages in step 1. In step 2, which runs on success of step 1, run something like 'update MyJobList set Job1 = 1' and 'update MyJobList set Job2 = 1', respectively.
Job3 starts an infinite loop (you may want to have a failsafe cut off after N minutes) while MyJobList.Job1 = 0 and MyJobList.Job2 = 0. When the while condition is broken by Jobs1 and 2 finishing, reset the flags to prepare for the next run--update MyJobList set Job1 = 0 and update MyJobList set Job2 = 0--then go to the SSIS package step.
Job4 fits in a similar way.
You should verify none of the jobs are already running before you tell them to go.