Tal y como lo cuentas, una clase abstract no es la solución, esto lo único que hace es que no puedas hacer un new ClaseAbstracta, ni dentro de Cliente ni fuera.
Creo que tendrás que hacerlo con una clase interna y un constructor privado, aunque no te lo puedo asegurar.
http://monillo007.blogspot.com/2008/...nernested.html
Hoy estoy un poco espeso, así que a ver si alguien se anima y lo confirma o corrige.