Registering someone who had a friend buy the tickets
you can add "free" participants from the backoffice to get them on the list. I'm not sure I understood your need about the number of seats, but you could create a status "paid elsewhere" that you set as not counted as taking a seat.

In theory, you can link these participants to the paying "main" participant, but I don't think you can do it from the user interface, you'll have to use the api explorer or code.

Does it solve the problem?