You can user a timer to run a task after a delay. You can use animation.duration to delay your task. You could also use animationState.animation.duration - animationState.time which would give you the remaining time for the current animation in the AnimationState.
When I implement events for cocos2d-iphone I will probably have a callback mechanism similar to spine-libgdx.