Well, we can call sei() before initialization, but the proper initialization of USART is not guaranteed. Because, if global interrupt is enabled and initialization is going on, it might be possible that the interrupt for USART will take place before we fully initialize it. That is the only reason. Its not that we cant do that, We can do that but performance is not guaranteed. I hope that is clear now.
- - - Updated - - -
Well anyways, What is the problem in doing initializing before sei()????????