State diagrams are basically visual code, aren't they?
And indeed they good for specifying, being the source of truth, but like code, they (afaik) don't really work for representing interactions with multiple actors (other than by sending/receiving messages), and they don't have a time component. But you could generate sequence diagrams from them, or at least verify them.
Xstate does have some functionality for interacting with the specified state machine, but I haven't played with it a lot. The idea of generating—or at least verifying—Xstate state machines with TLA+ has come across my mind, though.
Statecharts are highly useful to represent behaviour. Sequence diagrams do not capture it as much.
Timed behaviour, like timeouts can be represented in statecharts by having transitions on time based conditions. For example an event puts the system in a 'waiting' state, and in the waiting state there is a 30 second transition to a 'fail' state unless some other event happens which pulls the system out of the 'waiting' state.
Also it provides a good indication of what behaviour is valid and what not valid and what are don't cares.
External interactions of a system can be model as the state changes of a system.
They also have 'memory', special elements that remember which substate the system was in before it jumped out of the state last time.
I recommend David Harel's very interesting paper on modelling behaviour with state charts.