For the first part of (1): The answer is no. The simplest example off the top of my head is the longest substring of ones in a 0,1 string. The typical DP solution would be to use a 1D array and store the length of the longest substring up that includes the $i$-th character in the $i$-th coordinate.
For the vice-versa part of (1): Yes.
The not-so-direct answer for (1) and (2) is that dynamic programming should be seen as a method and not a set of problems. It just describes a general paradigm for solving problems by memoizing solutions to subproblems and building on them. In that sense, it really is some kind of extension of greedy algorithms, only that it can build on multiple subproblems instead of just one in the case of greedy algorithms.
For part (3): This holds for finite undirected graphs with positive weights. It also holds for countably infinite graphs, but does not hold in general for graphs of larger cardinality.