I would use events. Define the delegate in C++ and then bind to them in your UMG widget. Then you can raise that event from either C++ or from a blueprint. Forum member WCode did a good tutorial on delegates here.
Either you go the delegate way like snidersh told you, or you create your own Widget BaseClass in C++ and then let the Widget Blueprint inherit from them (Reparent them after creating them).
If you search the forum/google, you can find thread about creating WidgetsClasses in C++ and how to use them. There you can just create an event that you can call in C++ or the BP version of the
Widget if you expose it.