I know that the progress spinner on tabsheets is an empty Label component with an animated border, but is there a way to add text underneath it in the same way that the client-side app-loading image can have
Ah, that is just a Label with a Valo style name attached.
But, unfortunately, since the whole Label spins, there is no way to add text to it that doesn’t spin (I tried using CSS pseudo-elements, didn’t work). Your only option is to add another Label, or to create your own custom component based on the theme in valo, relevant CSS copied below: