This is a question that is highly specific to the game and implementation. So let's discuss yours:
But broadly, you don't have to worry about who should handle the collision if both parts of the collision can collaborate on the processing.
For instance, instead of considering all possible damage sources vs. all possible types of units, consider storing only 2 values in the projectile: "Damage Type" and "Raw Damage". Then, when a unit collides with the bullet, have the bullet pass the "Damage Type" and "Raw Damage" parameters.
The Unit then would have some method to calculate how much damage it should take given those two inputs. You'd need to use Delegates, Callbacks, or something similar to communicate between the two objects (you did not list a language, so I can't provide more specifics)
This way, units only have to consider possibilities that are relevant to them, and the bullet doesn't care what it hits.
In this example, Damage Type might be "Projectile", "Explosion", or even something more specific, like "LightMachineGunBullet". Units would then modify the raw damage based on the damage type, for instance, a tank that takes only 10% damage from Projectiles, but 100% from explosions.