One example where you'd want to wait for all the subflows to complete and you'd want to let them proceed in parallel because you didn't care in what order they completed would be if, let's say, you required approval both from the legal department and the financial department. each department would do their approval evaluation using one of the subflows, and each would finish in their own time so we don't know which finishes first. (Of course, one or both might disapprove, so it's important to make sure that is detected properly by the calling flow).
An example where the main flow may not care about waiting for the subprocesses is if each subprocess is running an automatic dialer to deliver a message to a set of customers. The main flow may only need to know that the dialers have been launched and they are now busy dialing and delivering their message, but the main flow may not need to wait for all the dialing to be complete.
Split for Each : You have one flow, let's say Approval and you want to run this flow for all elements in Page list to assign to different approvers. So this shape will start multiple instances of same flow based on number of elements in Page list. You have to specify one flow name and page list name in configuration
Split Join : You want to start multiple flows ex. BackgroundCheck, EmploymentCheck etc. This is not based on a Page list, you need to specify all Flows to start in configuration