Cast function is UE4 things that check in UE4 reflection system if cast is valid, in order for cast with that function the classes you cast to need naturally to be visible to reflection system, thats why turning to unreal interface worked.
Note that Cast function is UE4 API feature and you can still use native C++ casting, bypassing UE4 reflection system. Ofcorse it risky as it throws responsibility for check to you, but if Cast function fails in some way, it is way to go.