The conclusion that
She says that POM leads to excess code and maintainability issues.
is wrong.
Page Objects is a a concept that can be implemented in many ways.
They solve two simple problems:
They reduce maintainability issues - the exact opposite of one of the points you list
I think a simple example will show both:
I will use pseudo-code
Without page objects
find ('div#main_content input#name').click #for focus
fill_in('div#main_content input#name'), with: 'Bob'
expect(find('div#main_content input#name')).to have_Value 'Bob'
With Page objects
name = div#main_content input#name # probably done in a setup file
find(name).click
fill_in(name), with: 'Bob'
expect(find(name)).to have_value 'Bob'
The second seems much more readable to me.
Also, although both would need to be changed if the locator changed, in the second case this change is only in one place, whereas in the first case the locator in 3 different places would need to be updated