There is no good way to change datablock values at runtime. That's the whole point of them, they are static values which are shared between server and client. If you change it on one side, you gotta change it on the other. For simple visual things, this usually doesn't matter, however for values which effect gameplay, it can seriously mess up client-sided prediction stuff.
However, changing the colorshift is a simple visual thing, so in theory we could do it, however it would effect the color of every image (or perhaps just newly created images? Needs experimenting).
There is no good way to do this, else people would be doing it already. One not so terrible solution which was discussed in a topic a while ago is to use playertypes as weapons; you can mount them, change nodes, animate, etc, and with sufficient scripting you can make them shootable. Unfortunately playertypes are much harder to create (afaik) than weapons, so nobody has really done it (which is surprising anyway).