This is an interesting situation ... we haven't gotten to it yet ourselves, but as you describe it, I'm sure we will soon. We have already faced something similar though -- the need for code in the domain layer to create new entities, which may be subclassed (using the same class name but different namespace).
What we've done is to create an EntityServices singleton, which has an EntityFactory and EntityGateway that can be set during EntityServices' initialization (otherwise default implementations are used). The domain layer can know about EntityServices.Factory and EntityServices.Gateway, but does not know about NHibernate. The gateway may provide entities from a source other than NHibernate, and may understand queries of types other than HQL. No NHibernate types are exposed in the public API of EntityServices, EntityFactory or EntityGateway.
We will probably go a step further and define "named queries" of a sort. EntityServices (or EntityGateway) will have a registry of queries, where each query knows its "type" -- NHibernate or whatever else. Then any code executing queries simply requests them by name and parameters -- e.g.
Code:
myResultSet = EntityServices.Gateway.ExecuteQuery(someQueryName, someQueryParameters);
and has no idea if NHibernate (or any persistence layer) is being used to provide the results. These queries could be executed from within the domain layer itself, without the problems of high coupling.