how then is it possible to process the data in the scenarios where the data cannot be processed bit by bit, but the processing logic needs the full data?
It's simple: Use pre-processing and meta data. For example, without every chunk, you don't know how many chunks there are, unless something upstream counted them and told you. You don't have to count them if the meta data tells you how many there are.
That may be a trivial example, but formats and even transmission protocols have been devised specifically to solve this exact problem. You can only work with what you have.
When people use the word “streaming” they're usually talking about transmission over the network, but it's the same problem when parsing a file from the hard drive. You can load the entire file into memory (sometimes called slurping or batch processing) or you can load a line/chunk at a time (effectively streaming). Which one is appropriate depends on the size of the file, size of the memory, and your parsing/processing needs.
If you don't mind looking at a few lines of Ruby code, I recommend referring to the comparison of performance metrics in this SO answer. It shows that there are some non-linear impacts to consider. Every coder should keep this stuff in mind before assuming there's only one obvious answer here.