This should work:
var listOfUserControls = GetUserControls(Page);
...
public List GetUserControls(Control ctrl)
{
var uCtrls = new List();
foreach (Control child in ctrl.Controls) {
if (child is UserControl) uCtrls.Add((UserControl)child);
uCtrls.AddRange(GetUserControls(child);
}
return uCtrls;
}