Here is a bokeh application example. I do not know what you are trying to do as you have not posted your code exactly. The key to deselecting or changing the selected data from a source is you need to replace the entire object or a change will not be registered. The exact same functionality could be achieved through javascript callbacks.
See a related example here, Bokeh: DataTable - how to set selected rows
from datetime import date
from random import randint
from bokeh.io import curdoc
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn, Button
output_file("data_table.html")
data = dict(
dates=[date(2014, 3, i+1) for i in range(10)],
downloads=[randint(0, 100) for i in range(10)],
)
source = ColumnDataSource(data)
columns = [
TableColumn(field="dates", title="Date", formatter=DateFormatter()),
TableColumn(field="downloads", title="Downloads"),
]
data_table = DataTable(source=source, columns=columns, width=400, height=280)
def callback():
source.selected = {'0d': {'glyph': None, 'indices': []},
'1d': {'indices': []},
'2d': {'indices': {}}}
button = Button(label="Reset all selected cells", button_type="success")
button.on_click(callback)
curdoc().add_root(widgetbox(data_table,button))