a long time ago (Mendix 5) I developed a similar feature based on your idea of using a generic “Component” entity. Back then I think we customized the FormLoader widget to allow loading a page based on an attribute of the entity (using mx.ui.OpenForm() as part of the Mendix Client API). Each page had a different layout with different widgets, and the user had a configured list of "Component” objects linked to their account to show a personal dashboard.
If I would develop something like that now I would probably try to go for a list view based on the generic “Component” entity with different specializations for each type of dashboard layout, allowing you to alter the display based on the templates feature within listviews (see screenshot) . This would be a pure Mendix solution without the need for custom widgets, and using custom listview styling (e.g. flexbox) you can pull a lot of tricks on manipulating the size and display of each specific dashboard item.
Your configuration would be part of the generic “Component” class, and each type of dashboard item can contain any needed other properties from its specialization in order to render their widgets.
Hope this makes some sense and answers your question, or at least sends you in the right direction!