Hey Jay!
You don’t have to cast it, you can define the functions in C++, and implement them in BP; or you can use an interface; or you can cast it in another blueprint which is loaded on demand; et cetera. We have a lot of base classes in C++ to prevent too early asset loading, so it’s definitely doable to use them as such.
As for the output references — I tested it when I wrote the article (4.22 or 4.24 probably), and `obj gc` did not free up those pins. If you have tested it in 4.25, and it was freed for you automatically, let me know; but I doubt that it has changed.