Are Tensorflow Variables essential?
The main benefit of using tf.Variables is you don't have to explicitly state what to optimize when you train a neural network. From the perspective of Machine Learning, Variables are network parameters (or weights) which have some initial value before training but get optimized during training (The gradients of the loss are calculated with respect to the Variables and using an Optimization Algorithm, their Variables are updated. (the famous equation w = w - alpha*dL_dw for SGD Algorithm).
In contrast, tf.constant is used to store those network parameters for which gradients of the loss are not intended. During training, the gradients of the loss with respect to constants are not calculated and hence their values are not updated. In order to feed the network with inputs, we use tf.placeholder. 
Are they essential? Yes. A deep neural network has millions of parameters  across dozens of Variables and though one can

define tensors with some initial value (based on some heuristics, like Glorot initialization)
calculate the gradient of the loss with respect to each of them (maybe using a for loop)
update their values based on some optimization algorithm (e.g., SGD)
taking extra care not to leave behind any of them,

a wise person will just use Variables and let the magic happen. After all, more and messy code means more chances of error.
I pretty much understand the concept of Variable in Tensorflow (I think) but I still haven't found them very useful. The main reason I read it is interesting to use them it's to later restore them, which might be handy in some cases, but you could achieve similar results using numpy.save for saving matrices and values, or even writing them out in a log file.
Variables are used to save Tensors but you can use a Python variable to save them, avoiding the Tensorflow's Variable extra wrapper.
Variables become nice when used using get_variable function since the code will be much cleaner than using dictionary to store weights, however, in terms of functionality, I don't get why are they important.
My conclusion about TF Variables is that they help us to write nicer code but they are not essential. Any thoughts about them?