I'm not sure if this is the answer, but in Java's documentation, it states the following:
The restriction to effectively final variables prohibits access to dynamically-changing local variables, whose capture would likely introduce concurrency problems. Compared to the final restriction, it reduces the clerical burden on programmers.
What I understand from this is that when you pass a lambda expression to a method, the expression should not cause concurrency problems, since this method can be used concurrently by multiple threads, and using non-final variables would likely cause racing conditions.
The documentation page if you want to read it for yourself and get further info: http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27.2