I found a semi-solution at http://stackoverflow.com/questions/1566388/wordpress-template-tags-getpage
adding a parents parameter to get_categories works perfectly.
$subcategories = get_categories('child_of='.$cat->cat_ID.'&parent='.$cat->cat_ID);
however:
$subpages = get_pages('child_of='.$page->ID.'&parent='.$page->ID);
only gives me one subpage. Any ideas?