Synchronization Accuracy Required For Communications
Not only are you dealing with the uncertain delay or phase but also importantly there will be frequency offsets; inevitably your transmitter will not be at the exact frequency of your receiver. Carrier and symbol timing recovery loops are common receiver implementations. A preamble code is not necessarily required as such recovery and synchronization schemes can be done using the data directly, but having known sequences can aid the recovery to be faster and operate in a lower SNR condition. For a example of a carrier recovery implementation that is suitable for BPSK/QPSK/QAM see

Recovering signal for psk

For timing recovery the Gardner Loop and Mueller &amp;Mueller synchronizer are commonly used. I posted some information on the Gardner Loop here:

Gardner Loop