Did a little bit of research... Looks like you could use the"poke" command to write data directly to the RAM address : 03FC0. Which is where the palette data is.
I don't really understand RAM that well, but i would guess it contains the the RBG values in order from 0-15. So maybe you could save the colors as a table of numbers, update it when necessary, and write the whole table to RAM periodically. I'll have to mess around with it some but the code might look something like this:
Color ={ 1st=RGB#forBlack, 2nd=RGB#forRed, 3rd=RGB#forBlue, etc............... --all the way to 16 } --if the players skin color is in slot 5 for example... if p.poisoned==true then Color.5th=RGB#forGreen end update_colors() --user defined function to write the "Color" table to RAM