Something that would help in addition to this would be a way to electronically affect the current from the output with a sort of function curve which would mean that the spacing between steps in the lower end is smaller than the spacing at the higher end. This would give me more control over the lower brightness values which I found to be of most importance. Is there any (simple) way to acheive this?
You might use something like a 6-bit (64 step) brightness correction table (array) to provide 64 brightness level values spanning the 256 level PWM duty cycle range. I've always called it a gamma correction table but that really isn't a correct description. Here's an example set of values you might try for the array;
Gamma array size: 64
Total PWM steps: 255
Gamma correction: .74
0, 1, 2, 2, 2, 2, 3, 3, 3, 4,
4, 5, 5, 6, 6, 7, 8, 9, 9, 10,
11, 12, 13, 14, 16, 17, 18, 20, 22, 23,
25, 27, 30, 32, 34, 37, 40, 43, 46, 50,
54, 58, 62, 66, 71, 76, 82, 88, 94,101,
108,116,124,132,141,151,162,173,184,197,
210,224,239,255