You seem to be suggesting that types are absent from lisp, that's not the case.
Common Lisp, Scheme, and Emacs Lisp all make use of types. They are, to a first approximation [0], all strongly typed and dynamically typed languages.
Since you're not dogmatic about the where of it, try computing:
(+ 2 'atom)
In your favorite common lisp. It will result in an error, specifically a `SIMPLE-TYPE-ERROR`.You can also specify types in function declarations in Common Lisp:
(defun double-integer (x)
(declare (type integer x))
(* 2 x))
This will only accept integers now. Other types passed in as a parameter to `double-integer` will result in an error.You can apply this at any level once you start building up your own types as well (structs, classes, etc.). The benefit here is that you can leave your code wide-open to allow for many cases at some stages, while optimizing or constraining it in others. This malleability is fantastic in lisps.
While I'm certainly a great fan and proponent of static type checking, the benefits of lisp's concepts (the malleability of its semantics and syntax), make it a great force-multiplier for component users. A great number of concepts become practically trivial when given the level of abstraction that lisps permit.
A good type system can give you something akin to a calculus of types.
A good functional language (here I'll include lisps even though many these days seem to discard them as such) give you a sort of calculus over computation.
But the structure of lisp (particularly its homoiconic nature) gives you a calculus over your programs syntax and semantics.
[0] The places where they may be considered weakly typed are places where it's somewhat "natural". Such as in Common Lisp where there's the numeric tower. Technically your number does stay a number, but it moves from an integer to, say, a rational when you perform a division by a non-divisor integer. It maintains the highest level of precision/accuracy possible. So `(/ 1 3)` doesn't become some 32-bit float version like `0.3333334`, but rather `1/3`, nor does it do the C thing and turn it into 0.