Lisp is a programming language that is highly programmable due to its metaprogramming capabilities. It uses s-expressions and macros to allow programs to manipulate and modify themselves. This self-modifying nature originates from Lisp's simple syntax and semantics that treat code as data. Macros in Lisp expand to s-expressions and allow code to be generated at compile-time rather than run-time.