For the stock: Pour into a large soup pot and add 2 cups of water. Add the garlic, celery, and salt and pepper. If you are skinning your fish yourself, add the fish skin, too. Squeeze the lemon into the broth and then drop the rind in, too. Bring to a boil, then simmer while you prepare the fish balls.
In a small pan, heat the olive oil over medium heat and saute the onion until soft, or about 5 minutes. Let cool.
Chop the fish into fine pieces and place in a bowl. Add the cooled onions, eggs, matzo meal, parsley, salt, and pepper and combine. The mixture should be firm enough to be able to form into balls. If it is too soft, add a bit more matzo meal, if it is too hard add a bit of the fish stock.
Form 2-3 tablespoons of the fish mixture into smooth balls and set aside. You should get 12 balls.
Add the balls to the simmering broth in a single layer and simmer until cooked through, about 10 minutes.
Remove the gefilte fish with a slotted spoon and drain on a paper towel.
To make the horseradish sauce, combine all ingredients.
Serve gefilte fish warm or cold on a bed of lettuce with the horseradish sauce!
For a parve recipe, simply serve with just horseradish instead of the sauce.