I'd say the idea is that the implementation of a command/procedure needs to do the checking. In your example, arithmetic addition is usually provided by expr [0], which checks the expression it is fed before trying to calculate anything.
When you would like to concatenate strings (including numbers), you would use quoting or commands/procs made for that purpose instead.