Our club has a two-stage membership process when it pertains to new members. In order to join our club, a person must first join us as a guest, for which there is a fee. The guest fee is applied to their registration fee when they become a member, as long as they become a member within the same membership term (we use fixed annual memberships, and we don't pro-rate memberships).
My initial thought was to have two different membership types: Guest and Club member, however when you change their membership type from guest to member the system adds another term to the membership instead of just changing it for the current term. We can manage this manually, but doesn't work so well with self-service profiles. The fact that we deduct the guest fee from the member fee isn't a problem, we can manage that with fee structures or CiviDiscount.
My next thought was to create a membership status for guests. When someone registers as a guest, they would become a member with a "guest" status. As far as I can tell however, there isn't a mechanism to automatically set the status to guest upon registration or based on the price set. You have to do it manually. All of the state rules are related to dates.
I also thought I could have users register for an event (when they come as a guest) and use their event registration to apply a discount to the membership, but we don't have a specific event for them to register for.
I've asked a few, more specific questions related to the above options, but I hope a less specific question with more application details might lead me in a direction I hadn't considered.