For my opinion, a lot of that is backwards. You're making people code logic all over the prototype Views. I've always maintained that when the View Templates are full of logic, it makes maintenance much harder/more expensive, since you have to play hide-and-seek with code. Is the code in the View? Is it in the backing beans? Does it ping-pong between the two?
Complex EL is a

to debug. Simple EL can be more easily debugged, since you can put breakpoints in the
Java backing bean, but a View Template isn't code, it's a static template, and therefore logic flow is not an inherent property. BTW, if you're coding EL as a replacement for h: outputText in JSF2, that's OK with JSF, but the outputText renders <span> tags that can be stylized. Lacking those tags, you'd only have fine-grained text styling abilities via brute-force HTML and my position has always been that the amount of actual raw HTML in a View Template should be kept to a minimum. The JSF renderer doesn't track it and if you were to replace the HTML renderer with, say, a PDF renderer, those raw tags wouldn't translate.
Datatables are likewise designed for specific functionality. They respect that what you are actually trying to do is present a 2-dimensional data display, and there's nothing inherent in, say, a table of logarithms that demands an iterative process. In fact, you could generate the rows and/or columns as a parallel operation and the resulting display would still be the same. Plus, the dataTable's backing Model object automatically tracks things like links, clicks, or AJAX operation and knows what row was processed without having to code explicit logic on the View Template.
Of course, the real problem is that there's no good tool available to properly render JSF View Templates for layout design. Only very primitive stuff.