Readability 1
You mentioned splitting the code into functions, but functions should also be meaningful.
I would remove the def difficult_easy(): functions, since they just call the main_func anyway, and put the contents of each of those functions directly in the if-else branch in the starting() function.
Like this:
if difficult == 1:
main_func(['hall', 'exam', 'road', 'gate', 'debt', 'poet', 'sir', 'girl', 'food'], 14)
This makes the code more readable and shorter. These 3 functions don't add anything useful or readable. They force me to look at the bottom of the file to see what they do, when that code could be in the same place as the if-else branch.
Readability 2
if letter not in alphabet:
print('You should enter only one letter!\n ')
I would add continue here on the line after print . It doesn't change the functionality, but it makes it clear that this is the end of the while loop in this branch and when reading the code I don't have to read further to see if anything more happens after the if-else branching. It also ensures that you don't accidentally execute code that you might add later on below the if-else branch.
Readability 3
if letter not in alphabet:
print('You should enter only one letter!\n ')
elif len(letter) != 1:
print('You can only display 1 letter at a time\n')
These "early exit" branches are nice and make the code more readable. You could make one more early exit in the same style, by moving the
if letter in guessed_letters:
print('You have already guessed this letter!\n\n')
To come third here, instead of being nested at the very bottom. Logically, it doesn't change the program, but it becomes more readable and less nested, which is generally a good thing.
Use variables
You have defined the variable length = len(secret_word) but you're not using it, instead you are repeating len(secret_word) several times in the code that follows, where you could just use length.
Other 1
output = []
for i in range(len(secret_word)):
output.append('_')
All of this can be replaced by just one line output = "*" * length since Python allows multiplying a string by a number. (It has to be below the definition of length)
https://docs.python.org/3/library/stdtypes.html#common-sequence-operations
Other 2
for n in range(length):
if secret_word[n] == letter:
output[n] = letter.upper()
The above is a very C-style loop, but in Python you don't need to loop through the indexes, you can access the characters in the string directly like this:
for c in secret_word:
if c == letter:
output[n] = letter.upper()
Final comments
Regarding classes and functions, I don't think you need them. This program is small enough and readable that it would just become more complex if you add classes and functions. If you want to practice, I suggest writing a bigger program instead where they would come to good use.