After I went through your intial question again I realized that MonoX already includes a part that lists all groups of a category - it is a part that is already present on the groups page and is located in the MonoX/ModuleGallery/SocialNetworking/Groups/GroupList.ascx
You just need to pass the category name to it via its URL: http://monox.mono-software.com/MonoX/Pages/SocialNetworking/Groups/GroupCategory/Software-development/ where the "slug" of your category is Software development (slugs are automatically generated when a category is created), URL format can be controlled through the web.config settings.
As for the list of all categories, you just need to put an ordinary repeater in your custom Web part and bind it to the list of categories that is returned by the GetGroupCategories() methods in the GroupRepository class - you could also use its overload that offers a complete control over the filtering and paging features. From the top of my head, your data binding method would contain something like this:
EntityCollection<SnGroupCategoryEntity> categories = GroupRepository.GetInstance().GetGroupCategories();
rptCategories.DataSource = categories;
All properties and methods of the SnGroupCategoryEntity are exposed by IntelliSense in VS.