Modify the output of wp_nav_menu in a very specific way?

Take a look here for #1: remove li class & id for menu items and pages list

Regarding items #2 and #3, why not just do this with CSS? The separators shouldn’t be in their own <li> tags anyway. The following CSS will add a | after each menu item, except the last.

#topMenu ul li a:after {
  content: "|";
  display: inline-block;
  margin-left: .618em;
  width: 1em;
}
#topMenu ul li:last-child a:after {
  display: none;
}