Final Frontier updates the star systems every frame via the Update event's onUpdate event handler. It boils down to doing the stuff in the updateDisplay function in CvSolarSystem.py.
This function resets the plot's feature, then adds the various models to the solar system feature's model (it has a bunch of nodes to add things to it via the feature's "dummy" functions, like addFeatureDummyModel and setFeatureDummyTexture). The nodes are defined in the feature's entry in the CIV4ArtDefines_Feature.xml which maps names to use in the Python to names of dummy nodes in the .nif file and also maps names of things that can be put into the nodes to .nif files for them
The list of things this function does is something like this:
set the orbit dash lines to be invisible
add the correct star type model
add buildings that appear in orbits (there are separate slots for these from the planet slots)
add an astral gate model if needed (picks which one based on number of pieces completed)
then for each planet: set orbit dashed lines for its orbit to be visible, add each planet using the correct type and size and also add atmospheric effect for some types, clouds for the earth-like type, and rings and moon if needed, add population lights effect, add buildings that show (mag-lev network and commercial satellites), and finally the flashing green selection indicator if the planet is selected.
All every screen update, and occasionally between since the update function is called directly at times when something happens that should have a visible effect. I have to assume doing all this in Python every frame has an impact on the frame rate, but it is obviously not too bad.