Conclusion: this practice is quite acceptable.
I believe this generally happens when you have an immutable object. Instead of mutating the original object, a new one is created with the given value and returned. The arguments for and against this using a chain of methods are about the same as using mutable and immutable objects.
The only thing I would like to say is that it becomes understandable for callers of the class - they cannot depend on the equality of identity with the hooked object, and it should be clear that the call does not change the original object. Although, if they do connect calls, they will not assign intermediate objects, so there will be no risk. The important thing is that they use only the last object in the method chain.
To use java.lang.String as an example, the String client does this:
myString.trim().replace("a", "b").substring(3, 9);
... means nothing, and, as a rule, indicates a misunderstanding of the programmer. What they should do is:
String myNewString = myString.trim().replace("a", "b").substring(3, 9);
... and then using myNewString in subsequent operations. Interestingly, the static analysis tool for Java, Findbugs, can detect cases of this misunderstanding and report it as a likely error.
The main business is customer understanding. Other disadvantages include if the value object is very expensive to create and the new one for each chain. You should be able to tell in your scenario if this could be a problem. In this case, instead of creating a new object in each method chain, you may need to implement the Builder template.
In addition, I cannot think of any other problems.