It's not the same, for example, I got an variable here called a,
var a = {b: 1}
So a is a reference to {b: 1}, which is an object.
Here are two possibilities, 1. you can modify a to like {c: 2}, 2. you can modify {b:1} to {b:2} and a still pointing to that object.
And there is a difference. Modifyinga is changing reference, and modifying {b: 1} is changing value(internally it can be a reference too if it's {b: {x: 1}}, objects uses references).
This is a concept you would probably never learn in JavaScript since its scripting language nature. But if you ever learn Clojure or Haskell, you may find that values never change, but references change sometimes in order to simulate the mutable world.
So functional programming mean side effects and mutable states should be isolated from most code. You can be sure the pure part is very reliable. But still you can not make IO operations and mutations as reliable. For details, you can not modify value or references in functional languages like Haskell and Clojure, you need to use Atom or IORef to use mutable states, which are special data types. And JavaScript just doesn't have any of these.
Back to the React side. JavaScript can be full of mutable states and we hate that. However how can we really program will no side effects and mutable states? You see DOM is mutable, as the UI changes over time, time is somehow changing. We need mutable states, and we need them under strict control.