I think the big thing is that you need a waitfor(gcf) at the end of your function and before you assign the table data to the output.
Check out this example:
function [out1]=myGUIwithATable(inputs..)
myTable=uitable(.......)
waitfor(gcf)
%This command will wait until you close the GUI before doing the code after
% it. We use this to allow you to enter all your data and whatnot, then once
% you close the fig, it will execute your save commands
out1=get(myTable,'Data');
So that ^^^ is how you can assign output variables to your table values
Saving via button is very very easy. On your button callback, just do
save('fileName.mat',get(myTable,'Data'))
Hope that helps!