I could tell you that functional programming (FP) is a style of programming in which one never changes a value that has already been computed. Instead, one creates new values as needed. By implication, using FP in practice requires a good garbage collector in order to get rid of values that are no longer needed.
Here's a simple example in C:
int factorial (int n) {
int result = 1;
while (n > 1) {
result *= n;
--n;
}
return result;
}
This code does not use FP, because it has the side effect of modifying the variables named n and result each time through the loop.
It is possible to achieve the same effect in an FP style, even in C, as follows:
int factorial(int n) {
if (n <= 1)
return 1;
return factorial(n-1) * n;
}
You will see that in this second example, no variable is ever changed after being given its initial value, so there are no side effects.
The foregoing explanation is grossly oversimplified, and I can think of no short way to explain why FP is important or useful, but this is a start.
As for your other questions:
There are several programming languages in widespread use that make FP easy (or sometimes even necessary). The three best known are probably Lisp (particularly its Scheme dialect), Haskell, and SML. There are substantial differences between the three languages, but it's not easy to explain those difference in a small space.
As far as I know, SML and Matlab are unrelated.