What happens if I send more data to serial buffer than it can hold?
It gets discarded.
What is the best way to do output? Send a half of buffer's capacity, than wait for it to go empty, than repeat. Or just ram as much data as you can and just not care at all, since hardware is supposed to handle it for you?
The best way is through the use of handshaking. The Arduino sends a message to the PC that it is ready to receive data. The PC sends data (no more than the Arduino can handle), and then waits for the Arduino to say that it is ready again.