I think the problem is that you have no way to represent variables in your syntax trees.
You could add variables to your Expression type.
type Expression
= Call CallExpression
| Todo
| NumberLiteral Float
| Variable String
or, even, if you have a small number of possible variables (say, X and Y):
type Expression
= Call CallExpression
| Todo
| NumberLiteral Float
| X
| Y
Then maintain a mapping of variables to values and use that mapping when doing computations with your trees.
In the first case (variables as strings):
type alias Mapping = Dict String Float
In the second case (just two variables X and Y):
type alias Mapping = { x: Float, y: Float}