Regarding your first approach, you can take a look at the following related post on dealing with service time of a bunch of activities at same location:
Regarding your second approach, you are right that it would be problematic if vehicle capacity is tight in your problem. For example, if your vehicle capacity is 1, assuming all job size is also 1, then, with shipments, you can do multiple jobs like pdpdpdpdpd... but with separate pickup and delivery jobs, together with the constraint, assuming pickup jobs are not combined, you can only do one pickup job (i.e., half job in the original shipment context). On the contrary, if your vehicle capacity is redundantly large, say, 1000, this would not be an issue.
Meanwhile, there is a discussion on job refactoring. This is just for your reference, because a proposed refactored job will be a list of activities with predefined order, so it might not be so useful for your problem.