Depends on the model of machine and the specific memory modules, but on some machines if you put 800 MHz in 667 MHz slots, they may not work.
Why? Because the memory timings and speeds are encoded on the RAM modules. If the appropriate 667 MHz timings and speeds are correctly listed on those 800 MHz RAM modules, it will work. However, some 800 MHz RAM is missing the 667 MHz entries. In that case it may not work. It's not that the RAM is incapable. It's just that Macs are very strict. Often if the Mac doesn't see the correct specs listed, it just won't boot, even if the RAM is capable. (You can actually get around this sometimes by reprogramming the RAM module to display the right 667 MHz entry, but that isn't feasible in most cases.)
However, it won't damage anything. I would suggest just trying it. If it doesn't work, reseat the RAM and zap the pram or whatever and try again. And if it still doesn't work, then get the proper RAM.
It somehow works although I am using 800 MHz RAM in only one slot and the other has 667 MHz.
Again, it depends on the specific RAM module. If it has the proper 667 speed/timings entry, it should work. However, sometimes it will even work even if the entry is not there, if the other paired RAM module has the right 667 MHz entry. I believe this is because the Mac is only checking one of the two memory slots. In that case, if you reverse the location of the RAM modules, it may not work.
Ideally though you should be running paired RAM.
In summary, an 800 MHz RAM stick can be programmed to identify itself as just an 800 MHz stick, or can be programmed to identify itself as a 533/667/800 MHz stick, etc. The former may not work in a 667 MHz Mac, but the latter usually will (if it has the right listed specs).