*.wants directories hook units into the start-up of other units, without having to modify their unit files. Units are 'plain text ini-style file that encodes information about a service, a socket, a device, a mount point, an automount point, a swap file or partition, a start-up target, a watched file system path, a timer controlled and supervised by systemd(1), a resource management slice or a group of externally created processes.' Runlevels are exposed via "target units" by systemd. By contrast, good ol' Sysinit used the Rc?.d files to change runlevels, and that still works if you override what systemd did. Wikipedia has a useful explanation.