io ho provato solo smarty e non mi sono trovato male.
Per quanto riguarda il metodo di accesso alle variabili, credo che il metodo più corretto sia quello di smary, più che altro sotto il punto di vista della chiarezza.
Nella programmazione a oggetti è meglio che le variabili all'interno di una classe vengano modificati da metodi interni ad essa.
Anche perchè potresti voler estendere il metodo di assegnazione, e controllare il contenuto della variabile, e se accedi in modi diversi alla variabile perdi questa possibilità, perchè avrai del "disordine" nel tuo codice.
Comunque se provi a stampare il contenuto della variabile nella quale istanzi smarty vedrai dove si trovano le variabili e volendo puoi assegnare il contenuto come dici di fare con flexy.
Purtroppo flexy non lo conosco quindi non posso darti un confronto.
ciao