So really the problem here is not the mechanics of things, you just want a very particular way of declaring it in your model.
I'm a strong proponent of mixins, but I suppose here the "ugly" part is that the mixin doesn't really grant a nice way of defining what the name of the column/attribute would be, and you just want a single attribute that becomes several.
So if you really want totally "magic" kinds of configuration, that is, you set up just one attribute on the class that magically creates two others, the straight path to this, without having to hack into metaclasses, is to use events. The blog post at http://techspot.zzzeek.org/2011/05/17/magic-a-new-orm/ illustrates a technique for doing this. Using the "mapper_configured" event you receive an event whenever a mapper is finished initializing itself. At that point you can scan through the class and/or mapping and apply any additional things you want to apply.
Another path is to override __mapper_cls__, which is a way of receiving a hook as soon as declarative sets up the mapping for the class. An example of using this method is in the distro in examples/declarative_reflection/. You'd use similar techniques, and at that stage you can also augment what gets sent to mapper() and add columns directly on the Table. The advantage to __mapper_cls__ is that you get to set up the class early, while the advantage to the mapper_configured event is that the approach remains discrete and separate from everything else going on, and also has access to the full configuration of other mappers.