I found a workaround:
instead of passing the parameter in the function, I save it as an appdata of the previewImage. I can then retrieve it when needed. So my code becomes:
setappdata(previewImage,'UpdatePreviewWindowFcn',@GUI_editPreview);
setappdata(previewImage,'HandleToMainFig',mainFig);
and in the GUI_editPreview I use
mainFig = getappdata(himage,'HandleToMainFig');