As I see the nerdkits code always uses an lcd_goto_position function (or similar, like the lcd_home or the lcd_clear_and_home) to properly set E1 and E2, before EVERY char-out LCD functions, like the lcd_write_string, for example.
After examining the lcd_goto_position function we can see it uses other LCD addressing than on the above picture.
In Proteus use the LC4857 module (not the normal 40x4 module!), it works with the expected addressing, and works properly as the above ccsinfo site says at its last line.
Or ... simply modify the properties of the normal 40x4 LCD module.