Preheat the oven to 350°F and prepare three 8-inch round cake pans by greasing and flouring them thoroughly. In a large mixing bowl, combine oil, sour cream, and sugar, whisking until smooth. Blend in eggs, vanilla, coconut extract, and coconut milk, stirring until homogeneous. Incorporate baking powder, baking soda, and salt, whisking thoroughly. Gradually mix in the flour just until no dry streaks remain. Gently fold in the crushed pineapple along with its juice and the shredded coconut. Divide the batter evenly among the pans and bake for 18–20 minutes, or until a toothpick inserted into the center emerges clean or with a few moist crumbs. Allow the cakes to cool in their pans for 20 minutes before transferring them to wire racks to cool completely.
For the pineapple filling, combine the crushed pineapple with juice, milk, and instant pudding mix in a bowl, stirring until smooth and thickened. Set aside.
To prepare the frosting, beat the cream cheese with an electric mixer until creamy. Add butter and beat at high speed until fully incorporated and smooth. Mix in the vanilla, coconut extract, and a pinch of salt. Add powdered sugar in several additions, beating well between each, and adjust sweetness and flavor to taste.
To assemble, position one cake layer on a serving plate and spread half of the pineapple filling over the top, keeping a clean edge around the perimeter. Place the second cake layer over it and repeat with the remaining filling. Add the final cake layer, then frost the entire cake with the prepared cream cheese frosting. Garnish with toasted coconut if desired. Chill for 4–6 hours before serving for easier slicing.