A heuristic approach to a problem is an empirical search or optimization method that often works at solving the problem, but doesn't have any of the rigorous proof that people like physicists and mathematicians expect. Nobody knows if it will always give the best answer to the problem. See HeuristicRule for more information.
A MetaHeuristic is a semi-mythical method for finding good heuristics for particular problems. It's a notion that comes up a lot in MachineLearning, EvolutionaryAlgorithms, and FuzzyLogic applications:
"What parameter settings do I use to get good results when applying heuristic method X to problem Y?"
"How do I adjust the parameters of heuristic X so I get better results on problem Y?"
"Which is 'better', heuristic X or heuristic Y?"
and so forth.
You bump your head against the MetaHeuristic and MetaOptimization problem whenever you hear somebody say "I tried a GeneticAlgorithm, but the results weren't any better than the old method," or "It's really hard to design FuzzyLogic parameters empirically." (both roughly present in this Wiki as of this writing) --BillTozier
Another take: A heuristic is a pretty good rule. A metaheuristic is a pretty good rule for finding pretty good rules.
One of the most important things to remember about metaheuristics is that there's NoFreeLunch. It's so important, it has its own theorem, the NoFreeLunchTheorem.
See also MetaOptimization