I have had some experience in this department and in fact I just went through this with my 3 year old[ my 10th child]. I also beleive in the type of parenting you explained so I can agree that it is difficult to find ways to change behavior.
What worked for me was to say to my son, I see you need a kiss and I would go and give him a really big kiss on the cheek. This allowed him to have that giddy feeling that they seem to get form spitting after we have given them the rules. Since this is often a need for attention you are substituting negative attention with positive.
I then told him this was something special between him and I and that he could not share these "kisses" with anyone else. This stopped him from spitting on others.
To get him to stop spitting on things you may want to get a small spray bottle put a little water in it and have him have clean what he spits on. This also shows him he has to be responsible for cleaning up his "germs".
I hope these suggestions work for you. Just remember it is an attention getting behavior which soon shall pass.