Tramite il modello ad oggetti di Sharepoint 2007 è possibile fare esattamente le stesse cose che possono essere fatte tramite interfaccia web e, a mio pareare, anche qualcosina in più.
L'altro giorno mi è capitato di dover creare una nuova lista da una console application, selezionando a priori il template e cercando di posizionarla nella quick launch bar. Il codice per far ciò è davvero semplice:

SPSite site = new SPSite("http://localhost");

if (site != null)
{
SPWeb web = site.OpenWeb();
web.Lists.Add("Nuova lista", "Desc...", web.ListTemplates["Custom list"]);
SPList list = web.Lists["Nuova lista"];
list.OnQuickLaunch = true;
list.Update();
}

Così ho creato una lista del template "Custom list" in automatico.
Ma se volessi creare una nuova lista che abbia la medesima struttura riportata da un mio template personalizzato ? Template che posso aver creato all'interno della site definition o semplicemente come stp.
In questo caso, ci viene in aiuto il metodo GetCustomListTemplates() della classe SPSite.

SPSite site = new SPSite("http://localhost");

if (site != null)
{
SPWeb web = site.OpenWeb();
web.Lists.Add("Nuova lista", "Desc...", site.GetCustomListTemplates(web)["NomeTemplateCustom"]);
SPList list = web.Lists["Nuova lista"];
list.OnQuickLaunch = true;
list.Update();
}

Allo stesso modo, abbiamo la possibilità di aggiungere nuovi campi alla lista o di agire su altre proprietà come la presenza di event handler o di workflow, l'abilitazione del feed rss o della history, l'aggiunta di nuove viste... e così via.