I would define the timeline instance outside the playAgain function, and set it paused.
Then in the playAgain function I would just restart the timeline. Try this out:
import com.greensock.*;
import com.greensock.easing.*;
var timeline:TimelineLite = new TimelineLite({onComplete:playAgain, paused:true});
timeline.append(new TweenLite(box1, 1, {_x:100, ease:Expo.easeOut}));
timeline.append(new TweenLite(box2, 1, {_x:200, ease:Expo.easeOut}));
timeline.append(new TweenLite(box3, 1, {_x:300, ease:Expo.easeOut}));
timeline.append(new TweenLite(box4, 1, {_x:400, ease:Expo.easeOut}));
var cycles:Number = 0;
function playAgain():Void
{
if (cycles <= 2)
{
timeline.restart();
cycles += 1;
}
}
playAgain();