Hi, it all depends on the situation. But to use delegates you need to have a reference to the owner of a the delegate (so I assume that it’s something that you called coupling).
In most cases interfaces are the answer. For example such functionalities as interacting with objects, unlocking something, open/close, are usually done with interfaces.
This is link to the documentation: Interfaces in Unreal Engine but it’s very common tool and you can find many tutorials online.
To let you briefly understand the idea, interfaces are functions that can be called on anything without casting - like sending a message. If an object has this interfaces implemented it will do it’s logic. If not it will just ignore the message. And what is great about interfaces is that they don’t do any hard references between objects.