Best-practices with BlueprintFunctionLibraries

BlueprintFunctionLibraries usually are full of static functions, so they don’t usually act as ‘objects’, holding state.

I’ve read the section Blueprint Function Libraries | Unreal Engine Documentation and that is the only way they talk about these. However, I’ve just noticed that the UNavigationSystem is implemented as a BlueprintFunctionLibrary. Is this unusual, or discouraged? It seems a natural way to add shared state that can be accessed by the nodes in the library, with the BFL itself being ‘target’ for the functions.

I ran across this while trying to create a BP-accessible delegate (for use with BindEventTo… in the graph). I noticed that there’s no natural ‘self’, and seemingly no way to define the delegate in the BFL to be, say, a delegate binding an actor to a function. (That was just an experiment - I’m looking for a way to create BP nodes that invoke a callback when finished; I don’t think this will be the right way).

Any comments on whether instanced BFLs are a good idea?