il controltemplate ridefinisce completamente l'aspetto di un un controllo del quale conservi solo il comportamento. In pratica è il massimo della customizzazione visiva. Tu invece vuoi andare oltre, vuoi che di tanto in tanto una textbox si comporti come una combobox... non si puo fare.

Se riscrivi da zero un customcontrol la cosa è differente ma non puo essere una textbox, devi proprio riscriverne gli stati e tutto il resto...

per rispondere anche alla tua ultima domanda un control template è strettamente legato al comportamento di un controllo specifico, basta vedere il codice di un qualsiasi control template di un qualsiasi esempio su internet e capisci come funziona la faccenda: i controlli hanno comportamenti propri ma sono lookless, hanno un controltemplate di default che ne definisce la veste grafica e tu definendo un altro control-template cambi la veste grafica e basta.

I customontrol si scrivono solo quando non esistono controlli che a livello di comportamento non soddisfano nessuna delle esigenze che soddisfano i controlli esistenti. Se a te serve una textbox devi usare una textbox se ti serve una combobox devi usare una combobox. Se invece vuoi creare un controllo che in base ad una condizione a volte sia una textbox e a volte sia una combobox (cosa che ti sconsiglio vivamente) devi percorrere un altra strada (piu semplice) quella dell'USERCONTROL.