Banana Shooter is looking great! I can't wait to play the final version.
I've taken the design decision in my game to have as few Global Variables as possible. This means that I encapsulate variables in their respective FSMs; for example I have a movesAllowed variable that is owned by the Moves Allowed FSM on my Movement Manager GameObject. If any other FSM needs to access this variable they request it from the Moves Allowed FSM and it's sent via an event (using Set Event Data). The downside to my approach is that it requires more plumbing (more states, events and actions) than using Global Variables, but it has the advantage of a cleaner division of concerns. So far it seems to be working well for me.
Did you make a specific game design decision to go the full Global Variables route, or is that just how your game grew to be?