The semantics of POSIX dirents haven't really changed, and any file system complexity is abstracted by the kernel's VFS subsystem to provide generic data in all cases. So, yes, it is possible for something like 'ls' to be finished, or at least for really long times.
But at the same time, consider things like UTF-8, localization, etc. They appear at the least expected moment and someone has to do something unless the tool becomes useless.
I caught myself thinking the same thing, however if you compare software to a physical product the importance of the analogy remains intact.
It may not apply to you however, I have been lucky enough to be surrounded by some very well disciplined developers who make a point of finishing a lot of what they start to varying degrees of success.
What does it even mean to "finish" a program like 'ls' given the increasing complexity of filesystems with time?