Yeah, that makes sense, since the effects shown might depends on the damage/targets/whatever, right?
It would still work if you could let the person write:
int doSkill(targets, etc.) {
// calculate damage with targets, whatever
showEffects(...)
applyDamage(...)
}
Which would let you do damage applying at the same time as bouncy-number display. But then you'd need to run the whole engine inside showEffects, so it would get a bit messy.
EDIT: But doing this would also let people show the damage whenever they wanted, and possibly even interspersed with different effects. That could be cool.