I figured it out from going through the code. I guess hidden groups are deliberately not populated in userGroups. Seems like it'd be helpful to have an extra flag for groups that determines whether or not it's selectable as a title aside from hidden (maybe I don't want the group or list of members to be available publicly but still want to use the associated title) but it might be too much of a corner case for me. For now, I've unhidden the groups that I really needed and made sure to disable join requests on them.