One other thought is that if you decide it is impossible to transpose() or ctranspose() a dataframe, then you would be able to treat these notations differently:
df(1:3,1:3) df'(1:3,1:3)
df.'(1:3,1:3)
So, for example df'(1:3,1:3) could be made to always return a sub-referenced dataframe.