I am not 100% sure on that, so I'd appreciate if someone also corrects me in case I am wrong. But I guess that Acquisition Program and Acquisition Program Name are two different "objects", with APN being just a name of the first (text).
Following the same logic, I guess the error you get is because the data types don't match. To update the Acquisition Program, you need to have a Program that you can assign to it. You can not assign a campaign to AP, because data type don't match.
But its an interesting question, will check it out by myself as well
I checked again and it seems once the Acquisition Program is set (has come value) you can not change it. But you can change it if a lead doesn't have an AP set yet. However, you need to have a program in Marketo (or create one) that you can then assign to a lead as an new AP value. So in this sense you should be able to use campaigns to manipulate AP value, as long as you assign an existing AP.
The only situation I managed to create where lead's AP has a value, but the AP doesn't exist, is in case when you delete an AP. Then the lead's AP changes to [AP] - deleted (#).
As for the difference AP vs. AP Name. The AP Name is just a Name of a Program, a text value that doesn't exist without an AP. Its value is directly referenced to an AP and you can not manipulate it.
Hope this helps;m