Till what extent we can have this chain?
Well, the answer is "you can have as long a chain as you like until it reaches such a length that the code is unreadable and your employer fires you".
Chaining pointers beyond 2 or 3 is a sign of really bad data structure design. Also, when your code uses such a construct, you are really showing how much you've exposed the inner workings of a structure to the code. Oh, I agree that some APIs, DLLs, and/or BIOS calls need you to do this kind of thing but you really shouldn't be creating long chains for your own code.
While your question was about "C" and not "C++", good programming practices should apply and you should be encapsulating the "depth" of the pointers in a routine (in C) or an object (in C++).
And even in C++, it can get pretty ugly.
obj->GetCust()->GetAcct()->GetBalanceDue()
is just bad encapsulation and is a good example of how to write bad C in C++.