In a large bowl, combine the shrimp, lime juice, chili powder, garlic, and ginger. Season with salt and black pepper, then let it marinate for 15 to 20 minutes.
While the shrimp marinates, melt the butter in a large skillet over medium heat. Add the shrimp and cook for 4 to 5 minutes, stirring occasionally, just until they begin to turn opaque. Transfer to a plate and set aside.
In the same skillet, heat the coconut oil over medium heat. Add the cumin seeds, turmeric, and garam masala, and cook for 1 to 2 minutes until fragrant.
Add the diced onion and cook for 4 to 5 minutes until it softens and develops a light color. Stir in the crushed tomatoes and season with salt and black pepper. Let the mixture cook for 4 to 5 minutes until slightly thickened.
Reduce the heat to low, then stir in the Greek yogurt and heavy cream. Cook gently for another 4 to 5 minutes. Return the shrimp and any juices to the skillet. Stir and cook just until heated through.
Serve hot over cooked basmati rice and garnish with fresh cilantro.