◆ React は変更しても自動で元に戻されるので操作が無効扱い
  ◆ 自動でリスナが設定されていて戻される
◆ Preact や lit-html などでは変更できる
  ◆ 設定したリスナ以外が設定されない
  ◆ DOM のプロパティは変わるけど直接操作しないと取得できない

React 系ツールで input 系の要素の変更イベントを受け取らない場合 変更されたときに変更後の値を取得できないだけで画面上 (DOM の value プロパティ) では変更されていると思ってました
実際に lit-html や hyperhtml や Preact では画面上では変わります
もちろん再レンダー処理が起きると Preact や live ディレクティブを使った lit-html では value に元の値が設定されて変更前の初期状態に戻ります

しかし React の場合は画面上の変更が発生しませんでした
ライブラリを使うものだと React に動きを合わせるために Preact に compat を追加しないといけないことはありますが 自分で使う分にはほとんど違いを感じないほどだったので珍しい違いです
と言っても 通常は defaultValue を使わず value を指定したのに変更イベントを受け取らないことはないので 困りはしなさそうです

Preact はシンプルな作りで ユーザが設定したリスナがそのまま設定されるくらいですが React は内部で色々やってます
ユーザがリスナを設定しなくても全てのイベントを受け取って なにかの処理をしています
その中に元の値に戻す処理があるようです

探してみると 登録されたリスナの処理の後に finishEventHandler という処理が呼び出されていて その中では restoreStateIfNeeded という関数が呼び出されています
restore 処理は input や textarea や select ごとに異なっていて input であればここの関数が呼び出されます

useState を使って更新した場合はどうなるのか比べてみると この restore 処理は state を更新した場合も行われていました
特にリスナ設定をしていないからというわけではないみたいです
state を更新していた場合は restore 処理で復元するデータ自体が更新後の state になっています
入力値をそのまま state に反映してるなら同じものになって変化なしですし 大文字化など変更して state にセットしている場合は変更されます

深く考えずに React の場合はユーザがリスナを設定してなくても イベントが起きたら自動で value に指定した値を DOM へ反映すると考えれば良さそうです

確認用

Preact

<!doctype html>
<meta charset="utf-8" />

<div id="root"></div>
<script src="https://unpkg.com/htm/preact/standalone.umd.js"></script>
<script>
const {html, render } = htmPreact

const App = () => {
const text = "TEXT"
const select = "1"
const checked = true

return html`
<h1>app</h1>
<input value=${text} />
<select value=${select}>
<option value="1">A</option>
<option value="2">B</option>
</select>
<input type="checkbox" checked=${checked} />
`
}

render(html`<${App} />`, document.getElementById("root"))
</script>

React

<!doctype html>
<meta charset="utf-8" />

<div id="root"></div>
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script type="text/babel">
const App = () => {
const text = "TEXT"
const select = "1"
const checked = true

return (
<div>
<h1>app</h1>
<input value={text} />
<select value={select}>
<option value="1">A</option>
<option value="2">B</option>
</select>
<input type="checkbox" checked={checked} />
</div>
)
}

ReactDOM.render(<App />, document.getElementById("root"))
</script>