The OP said: "I know a few methods, but I'm looking for more." so here are my offerings for the sake of interest. The second is intentionally a bit convoluted. The third may actually be of interest as the method could be used for in-place modification.
With[{op = MapIndexed[#[Slot @@ #2] &, fns]}, op & @@@ list]
Fold[RotateLeft@MapAt[#2, #, 1] &, list\[Transpose], Function[x, x /@ # &] /@ fns]\[Transpose]
Module[{x = list\[Transpose]}, Table[x[[i]] = fns[[i]] /@ x[[i]], {i, Length@x}]; x\[Transpose]]
Or for in-place modification:
With[{x = list}, Table[x[[All, i]] = fns[[i]] /@ x[[All, i]], {i, Length@First@x}]; x]
This post is primarily to provide the service of comparative timings. I will be using Mathematica 7.
Timings using an array of 1.5 million Integers and three inert symbolic heads:
fns = {f, g, h};
list = RandomInteger[1*^6, {500000, 3}];
times = timeAvg[#[]] & /@ methods;
BarChart[MapThread[Labeled, {times, methods}]]

Using an array of Reals and three trig functions:
fns = {Sin, Cos, Csc};
list = RandomReal[1*^6, {500000, 3}];
times = timeAvg[#[]] & /@ methods;
BarChart[MapThread[Labeled, {times, methods}]]

To explore performance with different shapes here is as above but with 500 random trig functions:
fns = RandomChoice[{Sin, Cos, Sec, Csc, Tan}, 500];
list = RandomReal[1*^6, {5000, 500}];
times = timeAvg[#[]] & /@ methods;
BarChart[MapThread[Labeled, {times, methods}]]

Functions as I named and used them:
SetAttributes[timeAvg, HoldFirst]
timeAvg[func_] :=
Do[If[# > 0.3, Return[#/5^i]] & @@ Timing@Do[func, {5^i}], {i, 0, 15}]
leonid1[] := Map[MapThread[Compose, {fns, #}] &, list]
leonid2[] := Transpose@MapThread[Map, {fns, Transpose[list]}]
rm1[] := Replace[list, x_List :> MapIndexed[fns[[First@#2]]@#1 &, x], {1}]
rm2[] := MapIndexed[fns[[First@#2]]@#1 &, #] & /@ list
kguler1[] := Inner[#1@#2 &, fns, #, List] & /@ list
kguler2[] := Inner[Compose, fns, #, List] & /@ list
wreach1[] := Inner[#2@#1 &, list, fns, List, 2]
wreach2[] := MapIndexed[fns[[Last@#2]]@#1 &, list, {2}]
wreach3[] := ListCorrelate[{fns}, list, {1, -1}, {}, Compose, Sequence]
wreach4[] := MapThread[Compose, {Array[fns &, Length@list], list}, 2]
wizard1[] := With[{op = MapIndexed[#[Slot @@ #2] &, fns]}, op & @@@ list]
wizard2[] := Fold[RotateLeft@MapAt[#2, #, 1] &, list\[Transpose], Function[x, x /@ # &] /@ fns]\[Transpose]
wizard3[] := Module[{x = list\[Transpose]}, Table[x[[i]] = fns[[i]] /@ x[[i]], {i, Length@x}]; x\[Transpose]]
methods = {leonid1, leonid2, rm1, rm2, kguler1, kguler2, wreach1,
wreach2, wreach3, wreach4, wizard1, wizard2, wizard3};
Compose; I think I started a trend. – Mr.Wizard Sep 30 '12 at 06:48Compose[]is supposed to be an obsolete function, though.. – J. M.'s missing motivation Sep 30 '12 at 09:46Composition-- a mistake I still make from time to time when writing code. The semantics ofComposeare also a bit of a mixed bag: part Lispfuncalland partComposition. The former meaning (#@##2&) is what people are using for this question, and I wouldn't mind seeing another name given to that -- much likeIdentityis a name for#&.Callperhaps, or the lengthyFunctionCall? – WReach Sep 30 '12 at 14:01Compose[]withComposition[]. Oh well... – J. M.'s missing motivation Sep 30 '12 at 14:06Composition-- it wouldn't really be applicable here as I see it. – Mr.Wizard Oct 04 '12 at 03:20InnerandListCorrelateover faster ones that usedMap. (I should also say that my final code will probably end up using Leonid's double Transpose. And for what it's worth, there was also much up-voting involved on my part prior to finally accepting an answer.) – Brett Champion Oct 04 '12 at 04:21