Thanks for your comments!
> Is the concept of expressing code as verbs fundamentally superior to expressing things as nouns?
Not necessarily, however having to invent “nouns” just to hold your “verbs” is irrational. Verbs by themselves don’t make your code superior (think procedural programming). What makes the code superior are functions in functional programming (and the lambda calculus that it is based upon). The main strength of functional programming is that it addresses most of the flows of OOP/imperative programming.
> Do functional languages have their own equivalent to expressing things in terms of nouns, what things are, or something similar to classes?
Yes, basically there are typed and untyped functional languages. You can think of functions as verbs and your data as nouns. Haskell, for example, has a phenomenal type system. Also, functional languages offer superior ways of abstraction with things like algebraic data types. The major difference is that functional languages offer no mechanism for data mutation, which eliminates a whole class of errors by itself.
> OOP is misnamed, at least with how it is used in most modern OOP language
Completely agree, the modern OOP should have been called Class-Oriented Programming.
> Many of your arguments against OOP come down to mutable state. But you can easily design most methods to return a new object with the intended change
Agree, but this is rarely done. OOP languages provide no built-in mechanisms to achieve such immutability. Objects have to be cloned (deep clone, not shallow), which is highly inefficient in OOP languages. The strengths of functional languages come from the fact that they achieve immutability without having to clone the data.