negative values for material/light colors?

The OpenGL specification specifies that the values are not clamped, so it’s probably supposed to work; but it’s not specifically stating that it should work. So again, your mileage may vary.