Welcome to software design! Where you try to make sure to retain features while nailing things down into a concrete framework.
You can create an add-ons folder, and within that a folder for each add-on you want to load. In each add-on folder you put an html file with the add-on snippet, a css file, and a js file with the code.
Each js file could look like this
Code:
module.exports = {
name: "MyAddon",
tag: "my-addon",
init: function(htmlNode, etc) {
// js code here
}
}
Then you could have some custom tags that people can add in their html
Code:
<!-- other dash stuff -->
<my-addon></my-addon>
and you can scan for these custom tags and if one matches an addon's tag, replace it with the addon (inject the html and css, then require() and call init)
Just an idea