Preheat oven to 425 degrees. Cut a 1/2-inch-thick slice from tops of onions. Discard tops (see note). Trim just enough from the root ends for onions to stand upright. Scoop out the center of each onion, leaving about three thick layers in each shell. Finely chop removed onion and reserve it for the stuffing. Arrange onion shells, open sides up, in a shallow, square baking pan. Add water and cover the pan tightly with foil. Bake onions until tender, about 30 minutes.
While onions roast, prepare stuffing. Cook bacon pieces in a heavy skillet over moderate heat until crisp. Transfer to a paper towel to drain. Reserve leftover fat in the skillet. While skillet is still hot, add reserved onion, celery, salt and pepper to skillet and sauté until celery is soft, about 5 minutes. Add garlic and cook an additional minute, stirring constantly. Transfer sautéed mixture to a large bowl and stir in bacon, spinach, bread crumbs, cheese, water chestnuts and 3/4 cup of the stock, then cool completely.
Remove onions from oven and reduce oven temperature to 350 degrees. Gently remove roasted onions from pan and discard water. Fill shells with stuffing, mounding slightly. Butter baking pan. Arrange filled onion shells in the pan. Drizzle 1 tbsp. of stock over each onion. Bake uncovered until heated through, about 25 minutes. (Note: Tops can be roasted and used as a garnish, if desired.)