I had the same problem, and my solution was to create game objects with FSMs on them that just served as holding objects for sets of variables...
For example, in my first game, I was storing player progress via global bool variables (two per level, "Entered?" and "Completed?") and this meant my 50 level game had a monster of a global variables list before you even considered anything else I wanted to store.
So created an object which set itself to "Do Not Destroy On Load" and put itself into a global Game Object variable. The object simply held all these booleans for me as local variables... then if I needed to interact with those variables, I could just use Get/Set FSM actions to retrieve the data.
It's not quite as user friendly to do as interacting with global variables, but if you are finding your list getting unmanageable (and believe me, having that many global vars to scroll through to get to "playerhealth", or whatever, is a real pain) it might be an option?