Passing handles around is not a good idea because it is passed by value, so as you have seen, anything added after does not come through.
You can pass the hObject of the GUI around instead and then use
handles = guidata( hObject );
I would never recommend having GUIs have such access to each other in general, but the alternative I use is too in-depth to explain if you are not familiar with Matlab OOP. I pass class objects between UIs instead and attach listeners to those. I never want a GUI listening to another GUI, I would much rather have one GUI update the properties of a shared object and another GUI listen to that shared object. It is far more robust and less prone to bugs also. But if you have never done Matlab OOP it takes more explaining than I have time for right now.