Hi,
All the order data is available in the $order object. Yes, there is no dimensions or weight in there and that's normal since that information is not part of the order but of the products. So the information is not lost. It's just not loaded as not necessary when you usually load the data of an order.
So simply loop through the array of the products in $order->cart->products and use the product_id of the elements to load the product information like this:
$productClass = hikashop_get('class.product');
$productData = $productClass->get($product->product_id);
echo $productData->product_weight;
I don't understand what you mean by "This is also when using the ShippingCache plugins."
The onAfterOrderConfirm trigger is a trigger only available for payment plugins and which will be called only for the payment plugin that has been selected by the customer. So there is no link to ShippingCache since that only applies to shipping plugins.