EDIT: Post crossed, this one was written before the last replay of liorean.
Wow RadarBob, what an essay. I remember dimly that we engaged in OOP discussions some months ago. Nice to see that you reap now the benefits of venturing into OOPtupia.
Let me state that I fully agree to what you wrote, I've had a similar experience. The points about cohesion and coupling - very good you mentioned them. A week ago I had to customize a very complex interactive calendar script - and I was very successful because the whole script was object-oriented. I even reused some components in another script, to the calendar unrelated, running on the same page.
Code Wizard, don't get intimidated if people tell you that OOP takes longer to write and is less efficient. The efficiency issue pops *always* up in the discussion whether or not to use OOP, and has been debated to death. Usually it is countered by telling that you should optimize later after you've done some benchmarking and identified the parts of code that have to run more efficiently.
OOP doesn't take longer to write. It takes longer to define the interfaces of your objects, and the relation between them. Which objects sends which message to whom and questions like that. But once you've done this, you have very good idea of the problem space. That's the main difference between OOP and procedural programming: In the latter, you have to use the computer's way to think and model your problem in it. In OOP, you define the problem in your own vocabulary. *That* improves readability, and makes your app better to understand by others.
liorean, I don't know why you brought up inheritance. You don't need to use inheritance if you have better, more fitting alternatives, and yet your app may qualify as a true OOP app nevertheless. Often, inheritance is overused and better refactored as composition/aggregation. Remember that inheritance breaks encapsulation.
Also, I have to agree with garadon that your cookie library is not a very good example for improved readability through an object-based approach. It's nice, condensed, and probably a bandwidth save, but another developer could have written a CookieJar library in which each cookie is modeled as a separate object, and it would be still efficient to use. Some people favor sometimes features over slight margins in performance.