Ok I'm happy enough with what I got. In case anyone else wants to know how to do something like this you ONLY need to use the client world reference.
First I get the light level in the block I change so that I'm not adding a semi pertinent light.
lightSaveVarible = (int) worldObj.getBlockLightValue(x,y,z);
Then make the actual change.
worldObj.setLightValue(EnumSkyBlock.Block, x,y, z, LEVEL OF LIGHT (0 to 15) );
worldObj.markBlockForUpdate(x,y,z);
This will light up / darken that block only, but updates can cause this light to spread or this darkness to be overridden so after some amount of time. I don't mind the dark going away, but after a bit of time has past I want to make sure the light isn't spreading so:
worldObj.setLightValue(EnumSkyBlock.Block, x,y,z, lightSave);
I wish I cared enough to dig around in how blocks are updated and actually rewrite the rendering so I can do it right, but I don't and this is good enough.
Edit: oops. Should have been getBlockLightValue not getLightBrightness