By "snapping" do you mean actual 'welding' (where 2 vertices become 1, joining the meshes into one object) or matching vertex coords (so they 'fit' together exactly but are still separate objects)?
If you mean how do you make them in the first place then:
http://en.wikipedia.org/wiki/3D_modelling
Personally I use & reccomend:
http://www.blender.org (very powerful and free, but complicated at first.. see tutorials section)
http://www.wings3d.com/ (free and uncomplicated, a good prog for an introduction to modelling)
http://www.inivis.com/ (not free but reasonably priced and fairly easy to use)
If you mean how do you make them in the first place then:
http://en.wikipedia.org/wiki/3D_modelling
Personally I use & reccomend:
http://www.blender.org (very powerful and free, but complicated at first.. see tutorials section)
http://www.wings3d.com/ (free and uncomplicated, a good prog for an introduction to modelling)
http://www.inivis.com/ (not free but reasonably priced and fairly easy to use)