I am going to compose these arguments into objects, because many of them are related to each other.
That sounds like a good step for me.
But this, apparently, leads to several classes of monsters
I donโt understand why they should be classes of โmonstersโ in general - you can save them as simple DTO classes, although you probably want to provide some verification that if an email address is specified, this is really a valid email address, etc. d.
in which NO use of an object never uses ALL arguments
Well, using an object never uses all the properties. This is good - multiple uses of DateTime use each individual property, for example.
You do not need to specify all the values โโwhen constructing Person - work out, which ones are really necessary for all applications, and put them in the constructor ... then either use the optional parameters for the parameter, or simply properties to make the Person type mutable. So you could:
Person person = new Person("Jon", "Skeet", // Required parameters email: " skeet@pobox.com "); // Optional
Or:
Person person = new Person("Jon", "Skeet") { Email = " skeet@pobox.com " };
Personally, I like the first approach, as this means that your object can be immutable, but it depends on how you feel about the optional parameters.
In any case, your other classes now just need to take these big drops (for example, two Person links and a Location link instead of 12 different links). They can assume that all the required values โโin large blocks are already filled (since they will be checked in the constructor), and then they can simply check that all the additional values โโthey require are also filled.