It is somewhat complex to explain it in a few lines because that modeling decission comes from deep understanding of DDD, CQ(R)S, fast readmodels, eventual consistency, etc.
As the manual says: "Query the persistence layer or any data source to obtain objects specific to an interface of the application".
The keyword here is Interface. In the case of a graphical UI the use of finders is to retrieve a concrete view to present it in a desktop form or webpage. In a non CRUD app the UI should be Task-Based so:
- Your views does not match your Entities and Aggregates.
- Your Entities and Aggregates does not (should not) contain the full lists of selection data i.e.: States and Cities (classic cascading dependency comboboxes)
- Your Aggregates and Entities does not (should not) contain the full list of referenced Entities (A Customer class with a hurge list of Orders, with all order data, placed inside is wrong DDD aggregate modeling) but somewhere in your app you have to show full order list.
- Your Views and Aggregates can be retrieved from different data sources (usually for query performance and/or eventural consistency). i.e NoSql readmodels, a non normalized relational database or precomputed views (instead of tables representing your Entities) in your domain relational database.
So you have a impedance mischatch betwen UI and Aggregates/Entities. The best way to resolve this is create, explicitly, a way to deal from persistence to view. Finders comes into play.
When a user issue a command that implies a change in your domain you have to retrieve an aggegate and use the aggregate root as entry point of the action. This ensures consistency and invariants (rules) of your domain. Aggregate modeling has a lot of nuances (take a look here) that makes bad idea to try using aggregates and entities for your views. So you need a way to read and build in memory aggregates from data sources. This is the job of repositories. Sometimes repositories gives you extra features that you do not need when retrieve data for views like entity change tracking, creation of unique identifications to persist, etc. You do not need anything of this when dealing with views. Repositories comes to play.