How can one determine the pulse width of a servo motor?
How can I determine for certain which pulse width corresponds to 0°
and 180° using Arduino?

You cannot. To begin with, no hobby servo, even expensive ones, have exact 180° travel. Cheap servos almost guaranteed to have it different. Also, some cheap servo electronics depends on frequency, so 0 position at 60Hz can be different from 0 at 65Hz.

if I were to send a pulse width that's lower than the one
corresponding to 0° to the servo, would it damage the motor?

It should not, at least not immediately. But most likely the servo will try to get there, drawing rather high stall current and heating up.
To address both your questions, you need to calibrate minimum and maximum duty cycles for each servo individually. There is good description of this procedure at the Adafruit site. When you have calibration data you can then scale the control command proportionally for each servo to get into desired position.