At the moment it is impossible for elements with a #type to set default cache behaviour because #cache is checked before element_info() is called.
This is obviously for speed, we could check #cache a second time after #pre_render, in the same way that we check #printed a second time.
This would allow elements with #type to define default render cache behaviour.