In answer to your questions:
1) How does functional programming relate to LISP?
Lisp (and Scheme) have first class functions and lexical scoping, the
same as Haskell. At some level you can claim than any language with
these features (including ML) has a strong functional subset.
Certainly this distinguishes Lisp from C and its relatives. On the
other hand, Lisp is not by any means pure - it has assignment and all
the baggage that brings with it. In some ways, it is worse than
ML since most structures are mutable. Lisp is also a strict language,
although lazy evaluation is easily simulated using explicit force /
delay style constructs. Both Lisp and Haskell have implicit storage
management - whether this is really related to being functional is
debatable.
2) What does Haskell offer that LISP does not?
I would say the primary features are
a) The type system. Lisp uses dynamic typing plus a very expressive
set of type declarations but no real type inference.
b) Since Haskell is pure it can be optimized in ways Lisp can't.
Basicly it is much easier to reason about purely functional
programs.
c) Haskell is a small language and does not require the large
runtime environments that many Lisps require. (This is both due
to the size of the Lisp language and the difficulty of removing
unused features during application delivery).
d) Haskell has an entirely different philosophy regarding syntax.
Some feel this is an advantage.
Of course there is lots of stuff in Lisp that Haskell doesn't have:
object oriented programming, syntactic abstraction, a dynamic
environment, the package system, dynamic typing, and extensive
libraries for example.
John