If you messed control flow and data transferring in your design then yes maybe it is a problem. But I do not know the details of protocol. I cannot operate by terms you used. But I understand how it should be made in general.
Do you re-send it? How do you know if the other side even received it?
What if it’s something that you can’t resend, for example index updates, which would potentially cause database corruption?
How do you do that today? You cannot resend it the same way using single connection - if single connection fails - result is the same. I do not see any difference.
File updating is atomic operation. You cannot write half of file first and half later. For example the app writes temp file in place and replaces the original file. But I expect more effective solution when you open file exclusively and update it partially (though it is a bit more risky).
In any case it is atomic procedure. You cannot start updating until you have all desired data on another side.
So it should not be matter how to send that data. Of course you need to know how much data should be received by remote endpoint. In other words you tell what you will send, and then remote side accepts all data blocks (using any count of connections), when remote sees it got all needed blocks for operation - it performs update.
No need to have something like TCP, but of course some work is required.
When a remote end gets data it needs aggregate data from multiple connections until all required blocks are received. Source end should send count of chunks and size of each (something similar to purpose of Content-Length in HTTP world).
P.S.
I read it briefly, but it does not look as detail description of what happens under the hood. Is it the correct document?
https://docs.syncthing.net/specs/bep-v1.html
P.P.S.
Dirty workaround which can do the trick.
We can start syncthing process for each inner directory (but transparent for user).
If you want to sync C:\SomeData and inside you have Data-A, Data-B, Data-C, then you can internally (inside syncthing) start the same code for C:\SomeData\Data-A, for C:\SomeData\Data-B, for C:\SomeData\Data-C, but user will see only C:\SomeData on UI.
It will need some wrapper code but probably less than you expect with multi-connections data transfering. Though if I benefit from such tricks, from point of view of code it is not a good idea, but maybe as temporal “solution” it is really not so bad.