ActionGroups are for groups of events that happen together.
ActionGroups are preferable to linear code for two reasons:
Simulation artifacts
Meaningless phenomena may be seen by the modeler if all concurrent behaviors actually run in some fixed sequential pattern. An ActionGroup allows the policy toward concurrent events to be changed, e.g. to shuffle the concurrent events according to different random seeds in different runs.
Potential for parallelism
Ordinary C compilers don't have enough information to determine whether or not there is a dependency between two sequential function calls. The compiler has to take the code literally and do the calls that way.
By adding that information in the form of an ActionGroup, Swarm can see more instances of concurrency to exploit.