Оборачивать Option в Option вообще лишнее. Мне кажется, что здесь вопрос скорее про десериализацию json. Я не когда не работал с json4s, поэтому не знаю как внутри устроена (де)сериализация. Если есть возможность кастомизировать сериализацию для конкретных типов, то можно какой угодно обьект собрать (и разобрать). Например, что бы можно было удобно задействовать pattern matching можно такой класс использовать а, например, с помощью
play-json можно написать казтомную сериализацию.
sealed trait Value
case class StringValue(s: String) extends Value
case class IntValue(i:Int) extends Value
case class Values(one: Value, two: Value)
case class Property(
name: String,
values: Values,
displayMode: Int
)