Is it possible to provide a computed observable an extra parameter?
For example, something like this:
var ViewModel = function(first, last) {
    this.firstName = ko.observable(first);
    this.lastName = ko.observable(last);
    var self = this;
    this.fullName = ko.computed(function(separator) {
       return self.firstName() + ' ' + self.lastName();
    }, this);
};
And then in the html:
<div data-bind="text: fullName(' - ')"></div>
My actual use case is far more complicated, but this is essentially what I'm trying to achieve, pass in a value in the html which is used as part of the computed function.
Failing this is there a way to make a ordinary function which takes parameters behave like a (computed) observable?
You can create a function, which returns an computed variable. You can try something like this.
var ViewModel = function(first, last) {
    this.firstName = ko.observable(first);
    this.lastName = ko.observable(last);
    var self = this;
    this.fullName = function(separator){
    return ko.computed(function () {
            return self.firstName() + separator + self.lastName();}, this);
};
};
<div data-bind="text: ViewModel.fullName('-')"></div>
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With