Tracking hours worked for the days of the week
The first step to reducing repetition is to use variables instead of literals. Why call DOTW['Monday'] when you could just use day as your key. Importantly, this will avoid errors like the one you created in the Sunday block, where you actually display Monday's hours instead of Sunday's.

The only difference between days is in the messages that you print to the user. You've given custom messages, but you could just put those in a dictionary and access them the same way you access DOTW. Here's an example of how the greeting could look:

today_messages = {
                "Monday": "Today is %s, How many hours would you like to add today?",
                "Tuesday": "Ah, Today is %s, How many hours have you worked?",
                "Wednesday": "Ah, Today is %s, How many hours have you worked?",
                "Thursday": "Ah, Today is %s, How many hours have you worked?",
                "Friday": "FINALLY IT'S FRIDAY!!! How many hours have you worked?",
                "Saturday": "Ah, Today is %s, How many hours have you worked?",
                "Sunday": "Ah, Today is %s, How many hours have you worked?",
                 }


With those changes you could make it all one block with just one test because Friday's message is an exception that doesn't need the string formatting argument.

def main(day):
    if day == "Friday":
        print today_messages[day]
    else:
        print today_messages[day] % day

    hours = int(raw_input())
    DOTW[day] = DOTW[day] + hours
    print hours_worked[day] %(day, DOTW[day])
    want = raw_input("Do you want to add more time? y/n \n &gt; ")
    overtime()
    leave(want)


Also you should use the newer str.format method. Using % is the old way, and str.format has a lot of useful formatting options. You don't particularly need them in your case but it's clearer and cleaner syntax. The basic way to use it is like this:

                "Sunday": "Ah, Today is {}, How many hours have you worked?",

...

print today_messages[day].format(day)


The particular advantage for you here is that formatting a message that takes no arguments won't raise errors, unlike with %. 

&gt;&gt;&gt; string = "Ignore me"
&gt;&gt;&gt; "Hello World!" % string

Traceback (most recent call last):
  File "&lt;pyshell#2&gt;", line 1, in &lt;module&gt;
    "Hello World!" % string
TypeError: not all arguments converted during string formatting
&gt;&gt;&gt; "Hello World!".format(string)
'Hello World!'


This means you no longer need to test for "Friday", since the format call will just be ignore for that string:

def main(day):
    print today_messages[day].format(day)
    hours = int(raw_input())
    DOTW[day] = DOTW[day] + hours
    print hours_worked[day].format(day, DOTW[day])

    want = raw_input("Do you want to add more time? y/n \n &gt; ")
    overtime()
    leave(want)