One of the most fascinating thing about beat 'em ups (and by extension, fighting games) is the way they manage and deliver input from the player. It's easy to assume that whatever input the player provides gets pushed directly to the character object, but this is far from the truth. More often that not, the input is being parsed by the engine and chopped into manageable sequences before it gets fed to the character and expressed. For example, the necessary motion to execute Zangief's 360 piledriver in Street Fighter 2 is a 360 rotation of the stick followed by a punch. It would seem that the game is waiting for the stick to make the full rotation but in actuality it is only really listening for about 270 degrees of rotation. You may think you're going through the motions when you execute the move on a full 360 rotation but truthfully, it hit 270 degrees and started listening for your punch input. You just did it fast enough that you wouldn't ever notice.
Now imagine you have a 60 frame opening attack animation for your beat 'em up character's opening attack. You execute the move with a button press and now you want to provide the input for the next attack in the combo. The good news is that the engine is immediately listening for further input from you because it knows this attack starts combos. The bad news is that your mashing fingers might just be so fast that you give the engine the input it needs before you've gotten to the point in the attack animation that the attack actually occurs. If the engine were to cut off the attack as soon as it gets your input then you run the risk of having an attack stop during the cool-looking and effective part of the animation and if you're SUPAH FAST then you run the risk of moving onto the next attack before you've even turned a hit box on, rendering the attack useless. So this is where the modern combat engine gets savvy. It immediately listens for your input when an attack starts, but instead of instantly acting upon your input once it gets it, it waits until a key frame in the animation to move on to the next attack in the sequence. If the animations are properly constructed you won't notice the gap and it will still feel powerful and fluid.
Interestingly, this is a much larger risk now with 3d games then it was with traditional 2d games because traditional games' attacks only lasted a couple frames in the first place and hit boxes were instantly extended. So when you cut off the animation with your mashing you still successfully attacked, although you would not likely perceive the cut off. In 3d, you can't really create decent-looking animations that don't have some anticipation (animation terminology for build-up; think about how Bugs Bunny lifts his knee up across his body and clenches his fists before comically running off the screen). As a case study, Bayonetta has 4 to 6 frames of anticipation on average for her opening attacks and that's before the frames it takes for the actual attack to occur, which is anywhere between 3 to 30 frames. Even at a bare minimum of approximately 10 frames, that's more than enough time for players to provide the input and kill the attack and create all kinds of problems.
If you want to investigate this for yourself, check out the multitude of fighting game ports on home consoles that have training modes that show you your input while you play. It's amazing to watch what goes in and what actually comes out. :)