In the first example I think Built should declare Builder as a friend, not the way you have it. I also think that the first option is better. This may be one of the rare occasions where friend classes can enhance your encapsulation, assuming you want all the users of your class to invoke the Builder to get a Built object and not ever invoke a Built constructor directly.
EDIT: Something like this (haven't tested)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
class Builder; //forward declare
static Build* BuildObject()
Build* object = new Build();
object->data = 0;