An entity with parent and child association is a good solution.
For the GUI to look like a reference set you add a grid with a microflow button called add. That button opens a form with a grid (your custom select form) and on that form is also a microflow button that retrieves the list of selected items and in which you create the relations.
The separate entity seems fine to me.
You can put a datagrid on the page that follows one of the associations to show HasRelationWith objects for a given Topic. Or use a microflow as datasource for that datagrid if you need more control over the objects shown.
To select multiple Topic objects create another page:
Be careful when creating a new topic and linking it to existing topics. You may run into the auto commit pitfall as described in this topic: https://forum.mendix.com/questions/7355/Autocommitted-Objects-Mystery