I just realized that in the lastest version of PS, you can ungroup smart objects. So I changed the code to that it won't flatten the "b" image.
#target photoshop
var srcFolder = new Folder('~/desktop/combine-test/');
var mask = '*a.psd'
var fileList = srcFolder.getFiles (mask);
var psdOptions = new PhotoshopSaveOptions()
psdOptions.layers = true
for(var i=0;i<fileList.length;i++){
var sndFileName = fileList[i].name.substring (0, fileList[i].name.length-5)
var sndFile = new File(srcFolder + '/' + sndFileName + 'b.psd')
var doc = open(fileList[i]);
placeFile (sndFile);
undoSO ();
doc.saveAs (new File(srcFolder +'/' + sndFileName + 'c.psd'), psdOptions)
doc.close (SaveOptions.DONOTSAVECHANGES);
}
function undoSO(){
var idplacedLayerConvertToLayers = stringIDToTypeID( "placedLayerConvertToLayers" );
executeAction( idplacedLayerConvertToLayers, undefined, DialogModes.NO );
var idungroupLayersEvent = stringIDToTypeID( "ungroupLayersEvent" );
var desc7 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref3 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref3.putEnumerated( idLyr, idOrdn, idTrgt );
desc7.putReference( idnull, ref3 );
executeAction( idungroupLayersEvent, desc7, DialogModes.NO );
}
function placeFile(file){
var idPlc = charIDToTypeID( "Plc " );
var desc12 = new ActionDescriptor();
var idIdnt = charIDToTypeID( "Idnt" );
desc12.putInteger( idIdnt, 2 );
var idnull = charIDToTypeID( "null" );
desc12.putPath( idnull, new File( file ) );
var idFTcs = charIDToTypeID( "FTcs" );
var idQCSt = charIDToTypeID( "QCSt" );
var idQcsa = charIDToTypeID( "Qcsa" );
desc12.putEnumerated( idFTcs, idQCSt, idQcsa );
var idOfst = charIDToTypeID( "Ofst" );
var desc13 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idPxl = charIDToTypeID( "#Pxl" );
desc13.putUnitDouble( idHrzn, idPxl, 0.000000 );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPxl = charIDToTypeID( "#Pxl" );
desc13.putUnitDouble( idVrtc, idPxl, 0.000000 );
var idOfst = charIDToTypeID( "Ofst" );
desc12.putObject( idOfst, idOfst, desc13 );
executeAction( idPlc, desc12, DialogModes.NO );
}