Olá,
Referente as suas perguntas, seguem respostas bem simplificadas:
1) Quando voce realiza o mapeamento das suas entidades para o NH, voce está dizendo como ele deve acessar as tabelas no banco e preencher os objetos. Em tempo de execução o NH, com base no mapeamento irá montar as Queries para o banco definido, executá-las
e com base no retorno preencher os objetos. Para consultas mais elaboradas, voce terá que utilizar Criterias, HQL ou em versões mais recentes poderá usar Linq.
2) Sim, é possível chamar procedures inclusive também para preencher objetos.