Global variables work just fine in Hide Object When expressions, but you sometimes have to "nudge" the object itself to get it to change visibility when the value of the variable is changed.
Give the object to which you have specified a "Hide Object When" expression an object name in the Inspector.
In the script that changes the value of the variable, follow that step with a Refresh Object step that specifies the object by name. If you have several objects that all are set up with "hide object when" expressions, you can end up with a series of Refresh Object steps following the set variable step. Or you can group the objects and set the group up with a single object name and one Hide Object When expression.
Thanks for the answer. This makes sense - seems like Filemaker wants to conserve CPU power by not constantly refreshing. It does make it a bit cumbersome though. Is there no way to refresh everything on the page at once?
Refresh Window will refresh the entire window. Refreshing an object or two is intended as a way to get what you need without having to refresh the entire window--which can in some cases trigger an undesirable delay or "flash" of your window while it redraws.