Nice, I like this approach a lot. Suggestion, use `Seq` matchers instead of `List` matchers, so you don't have to convert the `args` array to a list:

    import annotation.tailrec

    @tailrec
    def parseConfig(config: Config, args: Seq[String]): Config = args match {
      case ("-i" | "--interface") +: interface +: tail =>
        parseConfig(config.copy(interface = interface), tail)
      case ("-p" | "--port") +: port +: tail =>
        parseConfig(config.copy(port = port.toInt), tail)
      case head +: tail =>
        throw new IllegalArgumentException("Unknown parameter: %s".format(head))
      case _ =>
        config
    }

This also assumes you're using the `Config` case class I suggested above.