The problem is that I really want to be able to turn down the backlight brightness and I do not seem to be able to do anything more than turn the backlight on and off using "lcd.setBacklight()". Is this a limitation of the I2C, or the LCD (either? neither?)
Neither. It is a limitation of the h/w on the backpack.
The backpack contains a PCF8574 i2c i/o expander. This allows a host (the Arduino)
to use the i2c bus to control pins on the PCF8574.
One of the PCF8574 i/o pins is hooked up to a transistor that turns the power going to the backlight on or off.
setBacklight(dimvalue) where dimvalue is 0-255 is use to set the brightness
while backlight() and noBacklight() are used to turn the backlight full on/off.
For the h/w on that i2c backpack setBacklight(dimvalue) really doesn't work as setBacklight(dimvalue) is
use to set a brightness and that h/w is not capable of controlling the brightness.
That hardware can only turn the backlight on/off so the library attempts to offer setBacklight() s/w compatibility by
doing the best it can so a dimvalue of zero will turn off the backlight and any other dimvalue
will turn on the backlight since the h/w is unable to actually do any dimming.