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

You could define a new base class for your widgets by extending UUserWidget in C++ and reparent your Widget Blueprint. Your base class could have all those members you want to access from C++. Though I don’t recommend that design, where possible a good UI design should poll or listen for changes from the game. It’s generally a bad idea to be directly pushing changes to the UI from game code.