Because Visual Basic use COM model, and it must be the single threaded apartment, any time only a thread can be scheduled. So if you don't use DoEvents in Function A, the calling A will be put into the message queue, but you don't call Doevents statement the thread have no time to pick up the message queue, the function can't be reentered.
However, if you call the Doevents statement, the Function A will be reentered, but you should remember VB is a single threaded app, so the former entering will no be executing until the reenter one ended.