For 2 and 3, have a look at https://www.mathworks.com/help/matlab/matlab_prog/add-and-delete-table-rows.html#AddAndDeleteTableRowsExample-2
Since the outputs of extract are already tables you can concatenate them without creating an empty table.
For 1, you could approach it in a slightly different manner:
T = whos('-file','sampleletters.mat');
BigTable = extract(T(1).name);
for i = 2:size(T,1)
BigTable = [BigTable ; extract(T(i).name)];
end
BigTable
function feat = extract(var_name)
letter = getfield(load('sampleletters.mat',var_name),var_name);
aratio = range(letter.Y)/range(letter.X);
idxmin = islocalmin(letter.X,"MinProminence",0.1);
numXmin = nnz(idxmin);
idxmax = islocalmax(letter.Y,"MinProminence",0.1);
numYmax = nnz(idxmax);
dT = diff(letter.Time);
dXdT = diff(letter.X)./dT;
dYdT = diff(letter.Y)./dT;
avgdX = mean(dXdT,"omitnan");
avgdY = mean(dYdT,"omitnan");
corrXY = corr(letter.X,letter.Y,"rows","complete");
featurenames = ["AspectRatio","NumMinX","NumMinY","AvgU","AvgV","CorrXY"];
feat = table(aratio,numXmin,numYmax,avgdX,avgdY,corrXY,'VariableNames',featurenames);
end