the sync knowledge is tracked per replica/copy, so it can't just rely on the scope_timestamp.
before a sync happens, the destination sends its knowledge to the source and the source uses the sync knowledge to select and figure out which changes to send.
if you want to understand it better, have a look at the custom provider section in the documentation.
sync framework is just like any other database applications, you should account for locking, concurrency, etc...