Not sure how familiar you are with the MapGuide Web API, but that's what you'll have to use to achieve this.
Basically, you'll have to dynamically generate a Layer Definition XML. You can see the XML of your existing layers for a reference or even load a generic one and modify the source of the data to the newly loaded data that the user uploaded... here's an example (PHP):
// some initialization
$user = new MgUserInformation([SESSION_ID]);
$site = new MgSiteConnection();
$site->Open($user);
// get the services
$res = $site->CreateService(MgServiceType::ResourceService);
// get the map object
$map = new MgMap($site);
$map->Open([MAPNAME]);
// get the XML content of a generic layer, returns MgByteReader
$layer_definition = $res->GetResourceContent(new MgResourceIdentifier('Library://Layers/generic.LayerDefinition'));
$dom = new DOMDocument();
$dom->loadXML($layer_definition->ToString());
// Modify where the data source is
$node = $dom->getElementsByTagName('FeatureName')->item(0);
$node->nodeValue = "schema.new_shp_table";
$new_def = $dom->saveXML();
// create and save the new layer to the current session only
$bs = new MgByteSource($new_def, strlen($new_def));
$bs->SetMimeType(MgMimeType::Xml);
$new_resource_id = new MgResourceIdentifier("Session:[SESSION_ID]//new_shp_layer.LayerDefinition");
$res->SetResource($new_resource_id, $bs->GetReader(), null);
$new_layer = new MgLayer($new_resource_id, $res);
$new_layer->SetName('new_shp_data');
$new_layer->SetVisible(true);
$new_layer->SetSelectable(true);
$new_layer->SetLegendLabel('New Uploaded Data');
$new_layer->SetDisplayInLegend(true);
$new_layer->SetGroup(NULL);
$layers->Insert(1, $new_layer);
$map->Save($res);
Where [MAPNAME] and [SESSION_ID] are passed into the script. This is all assuming you want the new data to be only available to the current session map. Otherwise you'll have to be able to SAVE the new layer into the MapDefinition on the server.
Hope this helps!