Grouping keys seems interesting. Instead of hardcoding the groupings they could be parsed out of a text file if blank lines are treated as horizontal dividers and blank columns as vertical dividers.
_@$%:;!?"()
`1234567890
qwe rty uio
asd fgh jkl
zxc vbn mp'
Anything more complex than this eg. switchable layouts would probably require a more elaborate file format.
One other thing that's really important in my opinion is putting the keyboard below the text, since touchscreen typing is basically unusable when the keyboard is on top.