Preheat the broiler. Line a baking sheet or roasting pan with foil. Place the whole tomatoes, onion and unpeeled garlic cloves on the foil and set under the broiler, 3 to 4 inches from the heat. Broil for 4 to 5 minutes, until charred on one side. Flip over and broil for another 4 to 5 minutes, until the skin is blistered and completely charred. The tomatoes should be very soft with the juices beginning to run out. Remove from heat.
Once cool enough to handle, quarter the tomatoes and place in a blender jar along with any juices from the baking sheet. Peel the garlic cloves and add to the blender along with the onion, salt and 1 cup of the chicken broth. Puree until completely smooth.
Heat the oil over medium heat in a casserole or soup pot until hot but not smoking. Pour in the puree and cover partially, as the sauce will sizzle and jump. Cook, stirring occasionally, for 7 to 8 minutes, or until the sauce thickens and darkens considerably.
Meanwhile, combine the grapefruit juice, orange juice, lime juice, vinegar, oregano, cumin, allspice, pepper, chopped achiote paste, and the remaining cup of chicken broth in the blender and puree until completely smooth.
Stir the puree into the tomato sauce and bring back to a simmer. Simmer 5 minutes, then add the shredded chicken. Mix together well and continue to cook, uncovered, until the chicken has absorbed most of the sauce, about 5 minutes. The finished dish should be very moist but not wet or soupy.
To serve, scoop about 1 cup of the chicken pibil onto the bottom half of a soft bun. Top with avocado crema and a few pickled red onions a la Yucateca. Cover with the top half of the bun to form a sandwich.