Don't know if it's been fixed in Windows 7, but as for this question:
What is the reasoning for this?
The answer likely has to do with the use of Pascal style strings where the first byte of the string stores the length. These strings are faster to manipulate due to the fact that you don't have to search the string for the null terminator to determine its length like you do with C-style strings. Consequently they were popular in many early windows programs (Excel for example, and probably explorer and various other scattered pieces of windows). The problem of course is that a byte can only hold values up to 255, so you can't have strings longer than that.
You can still see remnants of this stuff scattered throughout the windows API. For example the old 16 bit LoadModule function's lpCmdLine. If paths longer than 255 characters were allowed, it could cause programs that use those functions to fail miserably, breaking backwards compatibility.