I've re-written the code now that I understand that you don't want the layers to be flattened. This should do the trick!
app.preferences.rulerUnits = Units.PIXELS;
getThoseLayers();
createSmartObject();
function getThoseLayers ()
{
var srcDoc = app.activeDocument;
var numOfLayers = srcDoc.layers.length;
// get the top layer
srcDoc.activeLayer = srcDoc.layers[0];
for (var i = numOfLayers -1; i >= 0; i--)
{
if(!srcDoc.layers[i].isBackgroundLayer)
{
addToSelection(srcDoc.layers[i].name)
}
}
}
function addToSelection (alayername)
{
if (alayername == null) return
try
{
var id66 = charIDToTypeID( "slct" );
var desc14 = new ActionDescriptor();
var id67 = charIDToTypeID( "null" );
var ref12 = new ActionReference();
var id68 = charIDToTypeID( "Lyr " );
ref12.putName( id68, alayername );
desc14.putReference( id67, ref12 );
var id69 = stringIDToTypeID( "selectionModifier" );
var id70 = stringIDToTypeID( "selectionModifierType" );
var id71 = stringIDToTypeID( "addToSelection" );
desc14.putEnumerated( id69, id70, id71 );
var id72 = charIDToTypeID( "MkVs" );
desc14.putBoolean( id72, false );
executeAction( id66, desc14, DialogModes.NO );
}
catch(e)
{
alert("Whoops! Problem getting layer " + alayername)
}
}
// create smartobject
function createSmartObject()
{
try
{
var id325 = stringIDToTypeID( "newPlacedLayer" );
executeAction( id325, undefined, DialogModes.NO );
}
catch(e)
{
alert("Whoops! Failed to make smart object " + e)
}
}
It works on grabbing all the layers (apart from the background) and selects those layers. I haven't tested it extensively, but it seems to work within groups and even if you have two layers named the same. If it does fail, it will tell you. Hope you find it useful.