I think I've worked out how to do this by using an OscillatorWithTimeIndex and manipulating the OscillatorTimeIndex that drives it.
(Correct me if I've got this wrong...) A hard synced oscillator would reset early before it has completed its full cycle (creating a nice discontinuity).
If you attenuate the output of the time index Sound then the oscillator it drives resets before it reaches the end of the wave.

Here's a trace of the index signal (top) and a sine wave oscillator that's being driven by it (bottom).
The Sound looks like this:

It doesn't "feel" like resetting one oscillator with another (and I haven't made it convenient to specify the syncing in terms of two frequencies of two oscillators) but I think the outputted waveform is the same.
Here's the Sound.