Your 'problem' will not be influenced by lcd.begin() because, as it is currently implemented in the library, it is not designed to do so. The first argument, number of columns, is used solely to implement the placing of the cursor at the beginning of a line (although it does not work correctly for 16x4 displays). The second argument, the number of rows, is used solely to inform the controller whether or not you are using a true 1-line display vs. any of the others.
The two of these together could be used to implement the line wrapping that you expected but that has not been done in the standard library. You could try the LiquidCrystal1.0 library which was written specifically to deal with 40x4 displays. That library handles the smaller displays as well, does the expected line wrapping, and also works with some out of spec (slower) controllers that don't work with the regular library. Start here --> Google Code Archive - Long-term storage for Google Code Project Hosting. and follow the Downloads link to the latest version.