Shopify Functions run server-side logic that changes the math — discounts, shipping rates, payment method availability, validation. They don't render anything visually; they decide what the checkout calculates.
Extensions render visual elements inside checkout — a banner, a custom field, an upsell block. They don't change pricing math on their own; they display and collect information within Shopify's checkout UI.
A "spend $50, get a free gift" feature needs a Function to actually apply the discount and a UI Extension to show the progress bar telling the customer how close they are. Picking only one gets you half the feature.