Hopefully you'll excuse a short rant with no data to substantiate it.
It's easy to give someone a list of something to do. You already know how it's done. Need a sandwich? "Go to the store. Buy these x items. Come home. Take two slices of bread..."
It's more difficult to say, "A sandwich is all or part of a meal. It's a set of ingredients that are roughly planar, layered between two pieces of bread. Ingredients frequently include lettuce, tomato, deli meats, and cheese. A grocery store is a place where you can go to buy.."
Or let me put it another way. One of the places where you see much less FP than other areas is games and simulation. Is it because performance is really that important? Haskell is very fast and provides more straightforward parallelism. Certainly you can make Haskell code run faster than some of the stuff people make decent games with every single day.
I think it's because simulations of a world are really goddamn hard to understand. How can you hold that much in your head at once? Baseball sim. "Pitcher throws a ball. It travels towards home plate, where someone swings at it with a bat. Test for collision on the baseball's vector and the bat's arcing collision box. If the ball hits, then.."
vs.
"The speed of a baseball as thrown by a pitcher is a product of the amount of power chosen by the player and a selection from possible pitches. A pitch selection is a product of all input from the player's controller who is currently on the field. The player who is currently on the field is a product of the number of outs from the previous inning. The outs from the previous inning are.."
It's really hard to think like that, because these problems are really actually very complicated. We've been "cheating" all along by not really understanding what the hell is actually going on in our simulations. It's completely chaotic.
Massively complex 3D games with physics tend to be very very buggy, in case you haven't noticed. Companies with big budgets seem to be able to pull it off because they can playtest everything to death, and special-case everything as needed to avoid the most visible problems in the simulation. Falling through geometry, physics going crazy, AI behaving incomprehensibly. This can all be suppressed somewhat by lots of hard, manual work by large teams of people. It's obviously not ideal from a programming perspective.
It's a lot easier to just list the effects of what you're seeing happen. You don't have to understand the system itself, just what the behaviors look like. Understanding what's actually going on is very difficult.