Cara um ELResolver é um resolvedor de valores dentro de um contexto a partir de uma Expressão, ao qual chamamos de Expression Language (EL). Entao digamos que temos a expressão #{clientesMB.cliente.nome} então o ELResolver do JSF é responsável por interpretar essa expressão e devolver o valor da propriedade ‘nome’, dentro do objeto ‘cliente’, que é uma propriedade que está dento do ManagedBean clientesMB. Esse clientesMB, neste caso, é um bean do contexto do JSF, então o ELResolver vai baseado na exprssao encontrar a instancia adequada e obter o valor solicitado na expressão.
Respondendo sua outra pergunta, o seu primeiro trecho de código não funciona por que o método getSessionMap() retorna um Map imutável com os atributos adicionados a sessão do usuário, apenas isso e esse map não terá os ManagedBeans do JSF que vc criou pois estes estão dentro do contexto do JSF e não como atributos da sessão do usuário.
Então quando vc faz:
getSessionMap().get(nomeObjeto);
O map retornado nao tem o bean que vc procura pois este esta dentro do contexto jsf e nao na sessão do usuário explicitamente.
Ressalto que esses beans poderão sim estar como atributos na sessão do usuário, mas apenas se vc definir no seu faces-config eles como sendo de escopo de session ou se vc simplesmente em algum momento adicionar algum destes a sessão do usuário explicitamente.
O seu segundo trecho funciona pq vc obtem o ELResolver do contexto do JSF, agora sim, a partir desse resolver vc pode obter qualquer valor de qualquer ManagedBean do JSF.
Quando vc faz
FacesContext context = FacesContext.getCurrentInstance();
ELResolver resolver = context.getApplication().getELResolver();
return resolver.getValue(context.getELContext(), null, valorObjeto);
Observe que vc obtem o ELResolver do contexto do JSF, o FacesContext. Por isso funciona.
Espero ter ajudado.