Using the handles structure is a much more neat, simple and safe way of using variables in different functions. It also helps that GUIs and their respective mfiles created using GUIDE are already set up for this type of passing and saving data.
I think that, in the vast majority of cases, taking advantage of the handles structure through the use of functions like guidata() is your best option.