Place the ham on a large cutting board. Remove the bone, and butterfly the meat; reserve the bone. (Alternatively have your butcher do this.)
Make the ham broth. Put the ham bone into a large stockpot. Add the carrots, onion, celery and sage. Cover with water and bring to a simmer over medium heat. Simmer the ham broth, uncovered. Skim frequently and cook until the broth has reduced to 2 quarts, about 2 hours. Strain the broth and measure out 1 quart and set it aside. Freeze or refrigerate the remaining broth for another purpose.
Meanwhile, prepare the ham and stuffing. In a medium bowl, soak the bread in the milk until it is soft, about 15 minutes. Squeeze the bread and put it in a large mixing bowl. Add the pine nuts, raisins, olives, garlic, spinach, Parmesan and mix.
Lay the ham fat-side up. Using a sharp knife, score the fat in a diamond pattern, making each slash about 2-inches apart and 1/4-inch deep. Season the meat generously with salt and pepper. Combine the basil, thyme and parsley leaves in a bowl. Add the lemon juice and enough of olive oil to form a paste, about 1/2 cup. Rub the herb paste all over the ham.
Preheat the oven to 350 degrees F.
Lay the ham fat-side down. Place several cups of the bread stuffing in the center of the ham. Roll the ham into a log taking care that the stuffing is evenly distributed. (Remaining stuffing can be cooked in a baking dish for 40 minutes before serving.) Tie the rolled ham with kitchen string at 3-inch intervals.
Heat 1/4 cup of olive oil over medium heat in a roasting pan just large enough to accommodate the ham. Add the ham roll and brown it on all sides, about 20 minutes. Remove the ham and place a rack in the pan (or fabricate 1 from aluminum foil).
Place the ham on the rack. Pour half of the stock into the pan. Place the roasting pan in the oven and let the ham cook for 4 hours, basting every 30 minutes or so with the pan juices. Add more stock if the pan seems dry. When the ham is tender remove it from the oven and transfer to a cutting board. Tent the ham with aluminum foil and allow it to rest for at least 30 minutes.
Remove the string and slice the ham about 2 inches thick. Serve with additional stuffing and polenta.
Serving suggestion: polenta.