You do need one, if your game is even remotely complex. I mean, you could code Flappy Bird with if statements, but anything with real animation and running, jumping, crouching, etc. needs a state machine or your life will be a nightmare.
This is because there are lots of combinations of things and transitions from states. Even with just a few states, it gets complex. Like if you can walk, run, jump, and crouch. You should be able to jump while you are walking or running, but jumping from a crouch doesn't make sense. Jumping while you are already jumping doesn't make sense either, if it's a realistic game. Or how about opening a door. Opening a door makes sense when walking, running doesn't make sense (you would need to stop or kick it), and opening a door while jumping doesn't work. Opening a door while crouching does make sense in a stealth game, but you would need to detect this, to play a different animation. If you don't use state machines, you end up with horrible code like this:
if ((button_pressed == OPEN and (current_speed.length < 4.0 and velocity.y == 0.0 and current_animation != CROUCHING) or (button_pressed == KICK and (current_speed.length >= 4.0 and current_animation == RUN))) {
// open the door
}
This is madness, it will break, you will have no idea why and every time you add a new animation or change the speed of something you will have to go and update every single if statement. Basically a nightmare.