I've had to do the most work to make my actions *not* happen all at once across sprites (cards) using delay timers and such. If you loop through the sprites in a set and tell them each to run the same sequence on each I would think that they would appear to be running simultaneously.
You can also create the actions before the loop so you aren't reinventing them each time.
It actually sounds like your use case could use the delay timers, too. Just do it all in a loop. Increment your delay timer every seven times through and shove the CCDelayTime in the front of each CCSequence.
Here's a loop I use to move a pile of cards, but where the ones on top trail slightly after the one being moved (solitaire style):
float delay = 0.03f;
while (cardToMove != nil)
{
// For the first card, just move it
if (cardToMove == self)
{
cardToMove.position = CGPointMake(cardToMove.position.x + xOffset, cardToMove.position.y - yOffset);
}
else
{
// You have to get the starting offset from the original card stack
startOffsetX = self.startPosition.x - cardToMove.startPosition.x;
startOffsetY = self.startPosition.y - cardToMove.startPosition.y;
[cardToMove runAction: [CCSequence actions: [CCDelayTime actionWithDuration: delay * x],
[CCMoveTo actionWithDuration: delay position: CGPointMake(self.position.x + startOffsetX, self.position.y - startOffsetY)],
nil]];
}
cardToMove = [cardToMove nextCard];
x+=1;
}