Okay, actually scratch what I said before. Good news, overriding GetWorld() does give your UObject event graph access to all static functions, like GetGameMode, GetAllActorsOfClass and your own blueprint function libraries (both C++ and BP assets). The only thing you need to make sure is that your implementation does not in some way call the original UObject::GetWorld() method, because when the original method is called, the UObject base class concludes that you haven’t overriden GetWorld.
In my case, I called the original UObject::GetWorld by accident via Outer->GetWorld() where Outer did not have a custom implementation. But now I return a custom UWorld * pointer or simply NULL if its not available and the world context dependent blueprint nodes become available. So there you have it, world context dependent blueprint nodes available in UObject event graphs.
class MYGAME_API USkill : public UObject
UFUNCTION(BlueprintImplementableEvent, BlueprintCallable, Category=MyGame)
// Begin UObject interface
virtual class UWorld* GetWorld() const override;
// End UObject interface
// Set this to a valid world right after creation
UWorld * World;
UWorld* USkill::GetWorld() const
Edit: image and example code added