Is it possible to keep Value inside Value?

Yes. Every type kept in a Value needs to implement PartialEq, and Value itself compares by identity - two Values are equal only if they're clones of the same Value. So the outer value notifies about a change only when the inner Value is replaced with another one, and changes of the inner value are tracked by the inner Value itself:

    use vertigo::{dom, Value};

    let my_value = Value::new(Value::new("String"));

    let val_render = my_value.render_value(|v| v.render_value(|v| dom! { <span>{v}</span> }));

    dom! {
        <span>{val_render}</span>
    }