I tend to prefer the latter, but I totally get that feeling where signals seem like they "should" be better. I just find in practice that references are a little easier to work with in some cases.
You can easily solve the owner dying issue by just using is_instance_valid()
before attempting to call anything on the owner reference.
That said, you can probably simplify your signal code if you connected the bullet killed_enemy
signal directly to the player's on-hit handler. It seems like the weapon on-kill handler is redundant? But I don't know the details of your implementation, I just know that there's often ways to simplify chains like this.
I find that signals are great in some use cases, and less good in other use cases.