You're right about hardware activation devices for desktop applications. Dangling dongles outa your printer port is quite legacy. New applications tend to use some form of on-line activation system. You see this in games and Windows.
But it is becoming more common in the embedded world, where it can act as product key, hardware ID, or activation number. Consider the most fundamental behaviour of a PUF. It allows a challenge–response protocol to generate a non clone-able set of values, each usually (but not necessarily) one bit wide, with some degree of repeat ability. Using fuzzy extraction, secure sketches, error correction and compression, a single number can be produced with very good reliability. The PUF (oscillator based) with multiple challenge-response pairs would live within an FPGA like so:-
And that's it: a set of bits. Use the set as you will. It could very well simply be the (uncloneable) device ID. PUFKY is a design for a random 128 bit cryptographic key extracted from ring oscillators. Intel have Stratix FPGAs/SoCs that incorporate on-board SRAM PUFs for protection against counterfeiting, cloning or reverse engineering. It can also be the key for cryptographic communications from the chip. You can see where the PUF fits into the Stratix:-
Circling back to software activation, a PUF is the evolved in-built "dongle" of yesteryear protecting modern software. It's just that the 'software' these days can be intellectual property like IP cores, gate/block configurations, digital signal processing algorithms etc. and communications data within and around embedded devices.