olha, a única forma eu acho que tem (utilizando JSF RI) é fazendo um workaround (A.K.A. gambi patterns) da vida ae 
pode ser?
a única solução que eu acho possível é essa:
passo 1: criar um método no teu backing bean pra criar os elementos
public PanelGrid getPainelLateral() {
//pegar o Application do FacesContext
Application app = FacesContext.getCurrentInstance().getApplication();
// primeiro criar o componente do painel
HtmlPanelGrid resultado = (HtmlPanelGrid) app.createComponent( HtmlPanelGrid.COMPONENT_TYPE );
resultado.setColumns( dataModelInterno.size() ); //supondo que o dataModeInterno seja uma list
// agora criar um monte de figurinhas Pressupõe-se que o T seja do tipo da sua lista
// pelo que eu vi, essa lista está dentro de alguns objetos que você itera pra montar a dataTable
// então você vai ter que fazer um binding da sua tabela no teu backing bean pra pegar o índice da linha
for( T t : dataModel.value.get( horizontalTable.getRowIndex() ).getDataModelInterno() ) {
//criar o componente de imagem
HtmlGraphicImage imagem = (HtmlGraphicImage) app.createComponent( HtmlGraphicImage.COMPONENT_TYPE );
// vamos supor que nesse T tenha o endereço da imagem
imagem.setUrl( t.getEnderecoDaImage() );
// agora botamos a figura no panelGrid
resultado.getChildren().add( imagem );
}
return resultado;
}
E daí na sua página tu faz assim:
em vez de:
<h:dataTable value="#{element1.dataModelInterno}"
var="element2" width="480" cellspacing="10">
<h:column>
<a id="exibirImagemGrande" onclick="abrir_popup('../infoCultural/exibirImagemGrande.jsf?urlImagem=#{element2.caminho}','400','350')">
<img src="#{element2.caminho}" width="50" height="50" align="left" class="img_link" />
</a>
</h:column>
</h:dataTable>
Você bota:
e adiciona um id pro teu htmlDataTable, eu botei “horizontalTable”
Obs: pediram pra te xingar poque vc usa RI

veja se consegue ae