It seems that while I strive to maintain OO principles, it all seems so contrived or unnatural.
My advice is to not get too dogmatic about OO principles. They work well, but sometimes when people say they're striving to maintain OO principles it can mean that they're creating a class for everything, even when it's not really appropriate. Things also get less unnatural as you get used to them, such as "x = 3" is natural for an assignment, even though someone with a math background would think it's unnatural.
You could also try taking a look at existing OO web apps and design patterns. A common OO design pattern is the MVC pattern, which is supported (almost enforced) by Ruby on Rails and Django. Do a search for MVC.
If you think of objects as constructs for holding state information, the definition of "object oriented" becomes strained by the stateless nature of web requests. However, stateless objects are still objects and web applications can follow OO design principles within that context.