Firstly, the best way to learn the detail of things like this is fire up WireShark and take a look.
However.. to answer you directly:
A unicast is a packet that is destined to a single address, IP or MAC.
After a client does s DISCOVER, it gets an OFFER from the server.
The server (whether a local server or a relay agent) sends the response with a target IP address of the address it would assign to the client, and the clients L2 MAC address in the L2 header. Therefore it's a unicast, but one based on an assumption of the IP address.
Typically a sending device would ARP for the MAC based on the IP address it wants to reach; in this scenario the cleint wouldn't respond to the ARP (it doesn't have the address, as you say) but the server 'knows better'.
Please remember to rate helpful posts to identify useful responses, and mark 'Answered' if appropriate!