I have worked with BT for a while and when the signal and hardware are fine everything is great.
I have also found as you move out of range and the signal drops off then you can encounter problems.
I generally use a checksum the main reason for the this is to ensure the data integrity. My recieve app knows what to expect as in the format of the serial stream but does not know the exact content. for example if the serial stream sends %start,1111,2222,3333,4444,CRLF the app knows to look for the '%start' and a CRLF to find the info and it will know there are 4 fields (this is not always the case), the 1's, 2's, 3's amd 4's could be any numbers if the wrong number is received then your app could do any number of odd things, by using a checksum the app will know that the data is corrupt and thus not use it or ask for it again.
as Positrom said flow control is not needed if everything (environment and hardware) are all good, but i find it is an extra layer to ensure correct operation.
Regards
Stu