Your proposal makes me think of an extension trait for Write instead that adds a method like this, which is very general. It takes a separator and an iterable of strings or &[u8]
fn write_multiple<Sep: ?Sized, T, I>(&mut self, sep: &Sep, input: I) -> Result<..>
where Sep: AsRef<[u8]>, I: IntoIterator<Item=T>, T: AsRef<[u8]>
Itertools has two methods that solve a related problem, they use the regular formatting .format(separator, formatter_closure) and .format_default(separator). Using formatting means they can work with both std::fmt::Write and std::io::Write.
Example use:
let mut s = String::new();
let data = [1, 2, 3];
writeln!(&mut s, "{}", data.iter().format_default(" - ")).unwrap();
// s is "1 - 2 - 3"