For some reason Juce does not use VstTimeInfo::kVstTransportChanged flag at all.
This is necessary to get proper song playback position without polling the position all the time.
I added these changes to Juce source code:
info.hasTransportChanged = (ti->flags & kVstTransportChanged) != 0;
Now it's easy to detect playback state change (play->stop, stop->play, playback position change) in the plugin by simply checking the hasTransportChanged flag.