List.serialize (Option.serialize Int.serialize) my_list
There are also some things about the language that break composability. For example, the presence of mutable references means you can't compose polymorphic functions (sounds weird, I know), which is inconvenient.
It basically boils down to less ability to front-load work by creating good abstractions.
Re:composing polymorphic functions, I'm not sure I follow. Do you mean the value restriction?