First of all, $pi returns Pi. Try it.
Also, try the /timer command as I typed it, and see how it does
not echo "$pi". I guess you know that lines from the commandline don't get evaluated immediately when you don't specify two slashes, but that doesn't keep /timer from evaluating it when it executes.
As for your main point, $eval does not work for this, because for example the text ",2)" may be part of the input. So that is not even a usable workaround.
Here's another (silly) example that will hopefully get my point across. Consider this remote event, which is supposed to annoy people by sending back their text after five seconds.
on *:TEXT:*:#:{ .timer 1 5 msg $chan $1- }
Now try making this not evaluate the message in $1- when the timer executes.