The key differences between the two are following:
Func<…> is an ordinary delegate that you can execute. In this case, the compiler compiles the body of the function to intermediate language (IL) just like when compiling standard method.
Func<T> creates an executable function.
Expression<Func<T>> creates an expression tree that allows you to work with the code in the function as data.
Expression Trees allow you to do things like LINQ to SQL and LINQ to XML by generating the underlying calls from your .NET code.