Toast 1 cup of the shredded sweetened coconut in a small skillet over medium-low heat, stirring constantly, until golden; transfer to a plate to cool.
In a small bowl, whisk the egg yolks until smooth and set aside.
In a medium saucepan, whisk together 3/4 cup granulated sugar and the cornstarch. Gradually whisk in the coconut milk and the whole milk or half-and-half until smooth.
Cook the milk mixture over medium-high heat, stirring constantly, until it becomes thick and bubbly.
Temper the egg yolks by whisking about 1 cup of the hot pudding mixture into the yolks, then pour the yolk mixture back into the saucepan while whisking constantly.
Return the pan to medium heat, bring to a gentle boil, reduce to low, and cook while stirring constantly for 2 more minutes. Remove from heat and stir in 1 tablespoon softened butter, 1 teaspoon vanilla extract, and 1/2 teaspoon coconut extract.
Strain the pudding through a fine-mesh strainer into a medium bowl. Fold in the remaining 1 cup shredded sweetened coconut.
Press a piece of plastic wrap or parchment directly onto the surface of the pudding and chill for at least 2 hours or overnight.
Make the crust by stirring together the graham cracker crumbs and 1/4 cup granulated sugar, then stir in the 6 tablespoons melted butter until the mixture is sandy.
Divide the graham cracker crust evenly among 6 to 8 (6–8 ounce) jars or dishes, pressing lightly to form a base.
Divide the chilled pudding evenly into the jars over the crust.
Top each jar with whipped cream and the toasted coconut.
Cover and refrigerate; store in the refrigerator up to 3 days.