We've discussed this internally many times and I personally have come to the conclusion that your system should have an API that your delivery layer calls. The delivery layer is the combined code and templates needed to render the componenent that goes onto the screen. Each of these components then gets called/included/whatever to place it onto the screen framework.
so we get
1) Code to handle data
2) Code to convert data into form ready for displaying (date formats, ordering, paging whatever)
3) Markup to render the converted data
4) Page build that combined different componenets together