Например, использовать RxJava, тогда репозиторий возвращает Observable и ему не важно, кто на него подписан.
Другой вариант - использовать коллбеки. Презентер, обращаясь в репозиторий, релизует интерфейс коллбека для получения данный. В этом случае репозиторий опять же не знает, кто к нему обращается.