Each webhook is set up against a specific topic (`order.created`, `order.updated`, `product.created`, `customer.updated`, and similar), delivered as a POST request carrying the relevant object as JSON. WooCommerce signs the payload with a secret you set when creating the webhook, included as an `X-WC-Webhook-Signature` header, so your endpoint can confirm the request actually came from your store and wasn't forged.
A genuinely common, separate case is the Stripe gateway for WooCommerce, which registers its own webhook endpoint directly with Stripe rather than going through WooCommerce's webhook system at all. That's what catches events a checkout page can't see on its own: a card that clears 3D Secure a minute later, a subscription renewal that succeeds or fails overnight, a dispute opened days after the sale. Getting the Stripe webhook secret and endpoint set up correctly on both sides is where a lot of 'why didn't this order update' problems come from.
WooCommerce doesn't automatically retry a failed delivery forever, and a webhook that fails silently, because your receiving server was down for five minutes, because a deploy was mid-flight, looks identical to an order that never fired an event at all unless you're logging deliveries somewhere and checking.