Heat the cooking oil in a large pot or Dutch oven over medium-high heat. Add the onion and garlic and cook until fragrant and beginning to brown.
Pour in about 2 cups of the chicken broth or water and scrape the bottom of the pot to loosen the browned bits.
Add the remaining broth or water, ham hock, garlic powder, and bay leaves. Bring to a boil and allow the ham to begin flavoring the liquid.
Add the rinsed lima beans, reduce the heat to a steady simmer, and cook uncovered for about 2 hours. Stir every 20–30 minutes.
During the final 30 minutes, allow the remaining liquid to reduce. If the beans need additional liquid before becoming tender, add water 1 cup at a time.
Once the beans are soft and plump, some have begun to break down, and very little free liquid remains, remove the pot from the heat.
Remove the ham hock bone and the bay leaves. Chop or shred the meat and stir it back into the beans if desired.
Stir in the cold butter and allow the beans to cool slightly. Taste before adding salt, then season with salt and black pepper as needed.