Why are there so many types of fabric? What is best?

It's mostly a matter of personal preference. There are a few types of materials used, here they are in categories:

Waterproof - These of course keep the clothes dry and the wetness in. Favorites are PUL, high quality fleece such as Windbloc or Windpro, Wool, and Procare. Wool can also be referred to as a soaker, and comes in hand knit items or wool fabric.

Soaker - The absorbent fabrics that make up the "soaker" of the diaper. Burley Knit Terry (very absorbent but very thick), Flannel (thin, requires many layers), Sherpa (very soft), Hemp (very absorbent, antibacterial, antifungal), Bamboo (very absorbent, super soft, antifungal, antibacterial), Terrycloth (soft), Velour (super soft), Microfiber (super absorbent), etc.

Outer - The fabrics used on the outside. Some may be cute prints, others may be waterproof material. Knits are stretchy, giving diapers a wider range of fit while wovens are not, so they may not fit as long. If the outer is cotton on a AIO, pocket, etc., expect some wicking. This does not happen nearly as much with poly outers.

Inside - The layer next to baby's skin. Some prefer a material that will wick wetness away and keep the skin dryer. Some examples are Microfleece (soft, pills with use), microchamois (soft, doesn't pill nearly as much), power dry wicking knit (thin but keeps wetness away from baby really well!), Suedecloth (doesn't pill or wear but gets buildup often), Crushed Panne (soft, fuzz wears off with time, picks up lint pills). Any soaker material can also be used as the inner.

Absorbancy Testing
Compare Pro Care
The Diaper Analyzer - absorbency and measurements
Artificial Materials and Cloth Diapering - Cut of Cloth
Properties Of Hemp - Wash & Care