A program that spells a given number [1-999,999,999,999]
There is no reason for dictionaries when you have an ordered list of items starting at zero with no missing indexes, a list will do just fine.

 suffixes = ['billion', 'million', 'thousand', '']

names_dict could be two seperate variables, because you are only accessing it with literal keys.

ONES = {0: '', 1:'one', 2:'two', 3:'three', 4:'four', 5:'five', 6:'six', 7:'seven', 8:'eight', 9:'nine'}
TENS = {0: '', 2: 'twenty', 3: 'thirty', 4: 'fourty', 5: 'fifty', 6: 'sixty', 7: 'seventy', 8: 'eighty', 9: 'ninty'}

although it may not be as efficient, digit_extract() can be made very simple with a list comprehension:

def digit_extract(num, digits=12):
    return [
        (num // (10**n)) % 10
        for n in range(digits, -1, -1)
    ]


note the default amount of digits, so if your requirements change it will be easy to modifiy your code. If you choose to go this route, then you will have to account for the number of digits not being divisible by three.
Your solution for digit_extract() is also fine, but consider using reversed(digit) instead of digit[::-1] as reversed is more readable.
Since hundred() takes exactly three args, there is no need to pass it a list. 

def hundred(hundreds, tens, ones):
    ...


would work instead, and if one wanted to pass a list they could call hundred(*three_digit).
when documenting python functions, the convention is to provide a docstring

def hundered(three_digit):
    """
    list [3 digit] to str
    """


this allows documentation to be accessed by hundred.__doc__.
Consider passing an integer argument to numberNames() and returning a string. Example:

def numberNames(num):
    ...
    return final_name.title()

if __name__ == "__main__":
    print(numberNames(input('Enter the number: ')))


This way numberNames can be reused in other contexts. the if __name__ == "__main__": condition allows your program to be imported as a module and its code reused  without runnint the program.
You can also simplify the for loop by iterating over digits and suffixes seperatly:

for suffix, i in zip(suffixes, range(0, 12, 3)):
    hund = hundered(digits[i:i+3])
    if hund != '':
        final_name += hund + ' ' + suffix + ' '




  feedback on my variable naming practices


Just because you mentioned it, try not to mix camel case (i.e. functionName) and undersocres (i.e. function_name).
pep8 suggests underscores and naming constant variables in all caps.