You start out with a clean sheet and put objects on it: containers for data, text, grafic elements, whatever. These objects can be position, resized, aligned and so on.
Now you can easily bind different things to the containers; you just drag&drop the thing you want from a list onto the container. After completing the template you load your data, trigger the report generator and the data of this specific data set is handed over to the generator and fed into the containers.
For a character sheet you either have data of a fixed size (attributes, saving throw bonuses,...) or lists of data (equipment, spells, available weapons,...) so you'd probably need two different mechanisms to fill the containers.
This way of working is rather intuitive - for me, at least
- and gives you near complete freedom for your design-your-own sheet.
To make it perfect, allow for filtering and sorting of the data within a container. We could have a list of combat-relevant feats under the combat block: make a container for the list of feats and filter it for combat relevant ones. This would of course necessitate an extension of the data, but hey! dreaming should be possible!