ODR gives you complete control of the output state of the entire port. If you know what all the port's pin's values should be at in any given moment, you can write directly to ODR. This will overwrite the values of each pin, where 1 sets and 0 resets. This may be more desirable than BSRR if you know what the output pin's values should be in memory.
BSRR gives you a method of setting and resetting at the individual pin level without caring what the current values are. It gives you two ranges where you can explicitly set and reset pins as a one-shot operation. Each 1 in the set range will set for that pin, and each 1 in the reset range will reset for that pin (if set and reset are both set for a pin, set takes precedence). This may be more desirable than ODR if you don't need to maintain what the pins should be in memory.