Here's an idea: the user creates a "widget" using primitives. Select the elements in the widget and group them. Click a menu option to save the group to the user's library of widgets. The widget can now be used like any other widget. It can also be ungrouped and edited once it's been added to a project. To modify the widget, add it to a project, ungroup it, edit, regroup, and add it back to the library.
Here's an idea: the user creates a "widget" using primitives. Select the elements in the widget and group them. Click a menu option to save the group to the user's library of widgets. The widget can now be used like any other widget. It can also be ungrouped and edited once it's been added to a project. To modify the widget, add it to a project, ungroup it, edit, regroup, and add it back to the library.