Can I declare a variable to hold a Widget BP Reference?

I could still be off basis here on what you’re trying to achieve. But it sounds like you might have your logic a little more complex than it needs to be. If you’re pulling information from your character, then trying to update a custom widget variable, then trying to pull that information into Blueprint to use with your HUD, then it seems like you’re adding a lot more overhead than needed.

Again, could be off basis. But I have my HUD that I made through UMG. I don’t have any custom widgets. I simply use the method above, and then inside the Blueprint graph of the UMG I’m extensively using the “Get Player Character” node, and I call custom C++ declared functions that are exposed to blueprint likes GetPlayerHealth() and GetWeapon()->GetAmmo() etc, etc to update the blueprint.

So at this point, the Blueprint is always simply listening for updates, rather than having its own version of all the variables I need to check.