I’m in the process of implementing something similar - albeit using client side code rather than developing a plugin.
I’m starting with my Material Design skin mentioned here:
1 - First, client side code adds a star to each category tile. The star in outline mode signifies the category is not a favourite.
2 - The user can then ‘favourite’ one or more categories by clicking on the appropriate stars - which then change to solid white. As each category is added, the view is re-sorted and the the favourites are moved to the top of the view.
3 - Once favourites have been selected, the user can optionally remove non favourites from the view by clicking the star top right of the page. This applies a filter to the view. (This functionality can easily be expanded to filter by additional attributes)
This is all working in my prototype although I have yet to persist the user's preferences to the server. I'm still reworking client side code so this may take some time to achieve. But in principle, this is a very light weight way to achieve what you need, at least on the category page. Once favourites are persisted, it shouldn't be difficult to retrieve them and sort and filter topic views using the same methodology.
In the short term, these preferences could be stored in a cookie, although clearly the above 1,2,3, process would need to be executed on every device the user uses to access the site.
Happy to share once this has been resolved.