Why don't {{ product.body }} and {{ product.field_specifications }} return values in custom commerce-product.html.twig file
why does
{{ product.body }} display nothing while {{ product_entity.body.value
}} displays something.

This is because {{ product.body }} returns an array not a single value. Body has other properties such as summary so you need to specify what you want from that field.

why does
{{ product.field_specifications }} display nothing while {{
product_entity.field_specifications.value }} displays something.

I'm not sure what field type you set field_specifications to, but I'm guessing you set it to a formatted text field. If that's the case it would return an array just like Body would. If field_specifications was simply a textfield, {{product.field_specifications}} would have worked.