So... If you DON'T set the pin as an OUTPUT, writing a HIGH with digitalWrite() enables the internal "weak pullup", which is a resistor of value about 20k to +5V. This allows enough current to flow out the pin to tell a voltmeter that there is 5V there, and enough for a modern LED to light very dimly, but not enough to get the current you are expecting. Effectively, you get the equivalent of a 20k+R current-limiting resistor to the voltage source, instead of just R.
Nice job on the picture and code posting, BTW. A lot of the time when people are "sure" that their code/circuit is correct, that info NEVER shows up (which is why the responders are a little ... assertive about asking.) Here, we got a good picture and the code quite quickly (and it did indeed make the problem obvious.)