One thing to try is to use a control of the Page Placeholder.
Although the web part doesn't have these options, the actual page placeholder control has the ability to designate the template (which you can assign dynamically) and the node you are 'placing'
You would have to test, but you can try adding a page placeholder at the root that would load in the 'root' with a different template depending.
below is a sample of kind of what you are looking at.
<%@ Register Src="~/CMSWebParts/General/pageplaceholder.ascx" TagName="pageholder" TagPrefix="uc1" %>
<uc1:pageholder runat="server" ID="myPlaceholder" Path="/"/>
protected override void OnInit(EventArgs e)
// Dynamically set the page template here
myPlaceholder.PageTemplate = "TheTemplateCodeName";