真面目に考えると
クロージャさえあれば、if 文は本当に排除できますし、そういう言語は多分もうありますよね。
ただ、そんな感じでif文を仮想関数で代用して、組み込みのbool型をやめて、BoolインターフェイスとTrueクラスとFalseクラスを導入するのがベストなのかと言われると微妙な気分。
インターフェイスみたいな方法で実現すると、拡張性が発生するんですよね。当然ですけど。Boolインターフェイスを実装した True でも False でもないクラスが作れるわけで。もちろんそれはある面いいことなんですけど、そういう形で拡張してしまうと、それはもう「真か偽か」だけでできている真理値 boolean value ではありません。
本当に十分形式化されている概念を実現する場合、拡張可能性はむしろ表現の直観的理解を阻害する気がします。