This feels more like two individual issues:
1. Update the list at reasonable times
You could refresh your list:
- At a fixed interval
- Whenever the user opens your plugin window
- On selection change
Whatever you decide, this would be the time to extract all fonts into a set which you use for your list.
const sketch = require('sketch/dom')
let textLayers = sketch.find('Text')
let fonts = [...new Set(textLayers.map(l => l.style.fontFamily))]
Presumably you want to be a bit more precise with font weights etc. but it's up to you.
2. Update all text fields on change
Using a similar iteration through all text layers you update the font settings on the text layers matching the entry in your set.